{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 日期时间属性提取\n",
    "\n",
    "本教程详细介绍如何使用 Pandas 的 `.dt` 访问器提取日期时间的各种属性。\n",
    "\n",
    "## 学习目标\n",
    "- 理解 `.dt` 访问器的使用前提和基本概念\n",
    "- 掌握基本日期时间组件的提取方法（年、月、日、时、分、秒）\n",
    "- 学习扩展日期属性的提取（星期、季度、一年中的第几天等）\n",
    "- 了解日期名称和格式化方法\n",
    "- 掌握特殊日期的判断方法（月初、月末、闰年等）\n",
    "- 学习时间周期属性的提取和应用\n",
    "- 通过实际案例掌握日期时间属性在数据分析中的应用\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 导入必要的库\n",
    "\n",
    "在开始之前，我们需要导入以下库：\n",
    "- `pandas`: 用于数据处理和日期时间操作\n",
    "- `numpy`: 用于数值计算和随机数生成\n",
    "- `matplotlib.pyplot`: 用于数据可视化\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 设置中文字体（可选，用于图表显示中文）\n",
    "plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. .dt访问器基础\n",
    "\n",
    "### 2.1 什么是.dt访问器？\n",
    "\n",
    "`.dt` 访问器是 Pandas 专门为 datetime 类型的 Series 提供的属性访问器，类似于字符串的 `.str` 访问器。它允许我们方便地提取日期时间的各种属性。\n",
    "\n",
    "### 2.2 使用前提条件\n",
    "\n",
    "**重要提示：**\n",
    "- `.dt` 访问器只能用于 `datetime64` 类型的 Series\n",
    "- 在使用 `.dt` 访问器之前，必须确保 Series 的数据类型是 datetime 类型\n",
    "- 如果数据是字符串格式，需要先用 `pd.to_datetime()` 转换\n",
    "\n",
    "**检查数据类型的方法：**\n",
    "- 使用 `series.dtype` 查看数据类型\n",
    "- 使用 `pd.api.types.is_datetime64_any_dtype(series)` 检查是否为 datetime 类型\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期时间Series:\n",
      "0   2023-01-01\n",
      "1   2023-01-02\n",
      "2   2023-01-03\n",
      "3   2023-01-04\n",
      "4   2023-01-05\n",
      "5   2023-01-06\n",
      "6   2023-01-07\n",
      "7   2023-01-08\n",
      "8   2023-01-09\n",
      "9   2023-01-10\n",
      "dtype: datetime64[ns]\n",
      "\n",
      "数据类型: datetime64[ns]\n",
      "是否为datetime类型: True\n",
      "\n",
      "字符串类型: object\n",
      "转换后类型: datetime64[ns]\n",
      "转换后可以使用.dt访问器: True\n"
     ]
    }
   ],
   "source": [
    "# 创建日期时间Series\n",
    "dates = pd.date_range('2023-01-01', periods=10, freq='D')\n",
    "dt_series = pd.Series(dates)\n",
    "\n",
    "print(\"日期时间Series:\")\n",
    "print(dt_series)\n",
    "print(f\"\\n数据类型: {dt_series.dtype}\")\n",
    "\n",
    "# 检查是否可以使用.dt访问器\n",
    "is_datetime = pd.api.types.is_datetime64_any_dtype(dt_series)\n",
    "print(f\"是否为datetime类型: {is_datetime}\")\n",
    "\n",
    "# 如果数据是字符串，需要先转换\n",
    "str_dates = pd.Series(['2023-01-01', '2023-01-02', '2023-01-03'])\n",
    "print(f\"\\n字符串类型: {str_dates.dtype}\")\n",
    "\n",
    "# 转换为datetime类型\n",
    "converted_dates = pd.to_datetime(str_dates)\n",
    "print(f\"转换后类型: {converted_dates.dtype}\")\n",
    "print(f\"转换后可以使用.dt访问器: {pd.api.types.is_datetime64_any_dtype(converted_dates)}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 直接对日期提取属性 vs 使用.dt访问器\n",
    "\n",
    "除了使用 `.dt` 访问器，我们还可以直接对日期对象提取属性。这两种方法有不同的适用场景：\n",
    "\n",
    "**直接提取属性的方法：**\n",
    "\n",
    "1. **单个日期对象（Python datetime）**：可以直接使用 `.year`, `.month`, `.day` 等属性\n",
    "2. **DatetimeIndex**：可以直接使用 `.year`, `.month`, `.day` 等属性\n",
    "3. **单个日期值（从Series中提取）**：可以使用 `.item()` 获取单个值后直接访问属性\n",
    "\n",
    "**使用场景对比：**\n",
    "\n",
    "| 方法 | 适用对象 | 示例 | 返回类型 |\n",
    "|------|---------|------|---------|\n",
    "| 直接属性访问 | 单个日期对象、DatetimeIndex | `date.year`, `index.year` | 整数或数组 |\n",
    "| `.dt` 访问器 | datetime类型的Series | `series.dt.year` | Series |\n",
    "\n",
    "**重要区别：**\n",
    "- **直接属性访问**：适用于单个日期对象或 DatetimeIndex，返回的是标量值或数组\n",
    "- **`.dt` 访问器**：适用于 Series，返回的是 Series，可以保持索引对齐\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "单个日期对象（Python datetime）:\n",
      "  日期: 2023-06-15 14:30:45\n",
      "  年份: 2023\n",
      "  月份: 6\n",
      "  日期: 15\n",
      "  小时: 14\n",
      "  分钟: 30\n",
      "  秒数: 45\n",
      "  星期几: 3\n",
      "  一年中的第几天: 166\n",
      "\n",
      "============================================================\n",
      "DatetimeIndex（直接提取属性）:\n",
      "  索引: DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04',\n",
      "               '2023-01-05'],\n",
      "              dtype='datetime64[ns]', freq='D')\n",
      "  年份数组: Index([2023, 2023, 2023, 2023, 2023], dtype='int32')\n",
      "  月份数组: Index([1, 1, 1, 1, 1], dtype='int32')\n",
      "  日期数组: Index([1, 2, 3, 4, 5], dtype='int32')\n",
      "  类型: <class 'pandas.core.indexes.base.Index'>\n",
      "\n",
      "============================================================\n",
      "从Series中提取单个值:\n",
      "  Series: 0   2023-01-01\n",
      "1   2023-01-02\n",
      "2   2023-01-03\n",
      "3   2023-01-04\n",
      "4   2023-01-05\n",
      "dtype: datetime64[ns]\n",
      "  第一个日期值: 2023-01-01 00:00:00\n",
      "  第一个日期的年份: 2023\n",
      "  第一个日期的月份: 1\n",
      "  转换为Python datetime: 2023-01-01 00:00:00\n",
      "  直接访问属性: 2023, 1\n",
      "\n",
      "============================================================\n",
      "使用.dt访问器（Series）:\n",
      "  Series: 0   2023-01-01\n",
      "1   2023-01-02\n",
      "2   2023-01-03\n",
      "3   2023-01-04\n",
      "4   2023-01-05\n",
      "dtype: datetime64[ns]\n",
      "  年份Series: 0    2023\n",
      "1    2023\n",
      "2    2023\n",
      "3    2023\n",
      "4    2023\n",
      "dtype: int32\n",
      "  月份Series: 0    1\n",
      "1    1\n",
      "2    1\n",
      "3    1\n",
      "4    1\n",
      "dtype: int32\n",
      "  类型: <class 'pandas.core.series.Series'>\n",
      "\n",
      "============================================================\n",
      "对比：直接属性 vs .dt访问器\n",
      "\n",
      "1. DatetimeIndex直接访问:\n",
      "   dt_index.year = Index([2023, 2023, 2023], dtype='int32')\n",
      "   类型: <class 'pandas.core.indexes.base.Index'>\n",
      "\n",
      "2. Series使用.dt访问器:\n",
      "   dt_series.dt.year = 0    2023\n",
      "1    2023\n",
      "2    2023\n",
      "dtype: int32\n",
      "   类型: <class 'pandas.core.series.Series'>\n",
      "   保持索引: RangeIndex(start=0, stop=3, step=1)\n",
      "\n",
      "3. 性能对比（小数据集差异不大）:\n",
      "   直接属性访问: 稍快（numpy数组）\n",
      "   .dt访问器: 稍慢但功能更丰富（返回Series，支持更多操作）\n"
     ]
    }
   ],
   "source": [
    "# ===== 方法1：直接对单个日期对象提取属性 =====\n",
    "from datetime import datetime\n",
    "\n",
    "# Python标准库的datetime对象\n",
    "single_date = datetime(2023, 6, 15, 14, 30, 45)\n",
    "print(\"单个日期对象（Python datetime）:\")\n",
    "print(f\"  日期: {single_date}\")\n",
    "print(f\"  年份: {single_date.year}\")\n",
    "print(f\"  月份: {single_date.month}\")\n",
    "print(f\"  日期: {single_date.day}\")\n",
    "print(f\"  小时: {single_date.hour}\")\n",
    "print(f\"  分钟: {single_date.minute}\")\n",
    "print(f\"  秒数: {single_date.second}\")\n",
    "print(f\"  星期几: {single_date.weekday()}\")  # 0=Monday, 6=Sunday\n",
    "print(f\"  一年中的第几天: {single_date.timetuple().tm_yday}\")\n",
    "\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "\n",
    "# ===== 方法2：直接对DatetimeIndex提取属性 =====\n",
    "# 创建DatetimeIndex\n",
    "dt_index = pd.date_range('2023-01-01', periods=5, freq='D')\n",
    "print(\"DatetimeIndex（直接提取属性）:\")\n",
    "print(f\"  索引: {dt_index}\")\n",
    "print(f\"  年份数组: {dt_index.year}\")\n",
    "print(f\"  月份数组: {dt_index.month}\")\n",
    "print(f\"  日期数组: {dt_index.day}\")\n",
    "print(f\"  类型: {type(dt_index.year)}\")  # numpy数组\n",
    "\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "\n",
    "# ===== 方法3：从Series中提取单个值后访问属性 =====\n",
    "dt_series = pd.Series(pd.date_range('2023-01-01', periods=5, freq='D'))\n",
    "print(\"从Series中提取单个值:\")\n",
    "print(f\"  Series: {dt_series}\")\n",
    "print(f\"  第一个日期值: {dt_series.iloc[0]}\")\n",
    "print(f\"  第一个日期的年份: {dt_series.iloc[0].year}\")\n",
    "print(f\"  第一个日期的月份: {dt_series.iloc[0].month}\")\n",
    "\n",
    "# 使用.item()方法获取Python datetime对象\n",
    "first_date = dt_series.iloc[0].to_pydatetime()\n",
    "print(f\"  转换为Python datetime: {first_date}\")\n",
    "print(f\"  直接访问属性: {first_date.year}, {first_date.month}\")\n",
    "\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "\n",
    "# ===== 方法4：使用.dt访问器（Series） =====\n",
    "print(\"使用.dt访问器（Series）:\")\n",
    "print(f\"  Series: {dt_series}\")\n",
    "print(f\"  年份Series: {dt_series.dt.year}\")\n",
    "print(f\"  月份Series: {dt_series.dt.month}\")\n",
    "print(f\"  类型: {type(dt_series.dt.year)}\")  # pandas Series\n",
    "\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "\n",
    "# ===== 对比：直接属性 vs .dt访问器 =====\n",
    "print(\"对比：直接属性 vs .dt访问器\")\n",
    "print(\"\\n1. DatetimeIndex直接访问:\")\n",
    "dt_index = pd.date_range('2023-01-01', periods=3, freq='D')\n",
    "print(f\"   dt_index.year = {dt_index.year}\")\n",
    "print(f\"   类型: {type(dt_index.year)}\")\n",
    "\n",
    "print(\"\\n2. Series使用.dt访问器:\")\n",
    "dt_series = pd.Series(dt_index)\n",
    "print(f\"   dt_series.dt.year = {dt_series.dt.year}\")\n",
    "print(f\"   类型: {type(dt_series.dt.year)}\")\n",
    "print(f\"   保持索引: {dt_series.dt.year.index}\")\n",
    "\n",
    "print(\"\\n3. 性能对比（小数据集差异不大）:\")\n",
    "print(\"   直接属性访问: 稍快（numpy数组）\")\n",
    "print(\"   .dt访问器: 稍慢但功能更丰富（返回Series，支持更多操作）\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 实际应用场景选择\n",
    "\n",
    "**何时使用直接属性访问：**\n",
    "\n",
    "1. **处理单个日期对象**：当你只有一个日期值需要提取属性时\n",
    "   ```python\n",
    "   date = datetime(2023, 6, 15)\n",
    "   year = date.year  # 直接访问\n",
    "   ```\n",
    "\n",
    "2. **处理DatetimeIndex**：当索引是DatetimeIndex时，可以直接访问\n",
    "   ```python\n",
    "   df.index.year  # 如果index是DatetimeIndex\n",
    "   ```\n",
    "\n",
    "3. **性能敏感场景**：对于大量数据，直接访问DatetimeIndex可能稍快\n",
    "\n",
    "**何时使用.dt访问器：**\n",
    "\n",
    "1. **处理Series数据**：当数据是Series类型时，必须使用`.dt`访问器\n",
    "   ```python\n",
    "   series.dt.year  # Series必须使用.dt\n",
    "   ```\n",
    "\n",
    "2. **需要保持索引对齐**：`.dt`访问器返回的Series会保持原始索引\n",
    "   ```python\n",
    "   # 即使Series有非连续索引，.dt访问器也会保持\n",
    "   series = pd.Series(dates, index=[0, 2, 4, 6])\n",
    "   series.dt.year  # 索引仍然是 [0, 2, 4, 6]\n",
    "   ```\n",
    "\n",
    "3. **需要链式操作**：`.dt`访问器支持链式调用\n",
    "   ```python\n",
    "   series.dt.year.astype(str)  # 链式操作\n",
    "   ```\n",
    "\n",
    "4. **需要更多功能**：`.dt`访问器提供了更多方法（如`.day_name()`, `.strftime()`等）\n",
    "\n",
    "**最佳实践：**\n",
    "- **Series数据**：统一使用 `.dt` 访问器，代码更清晰、功能更丰富\n",
    "- **单个日期**：直接使用属性访问，简单直接\n",
    "- **DatetimeIndex**：两种方法都可以，根据具体需求选择\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DataFrame（DatetimeIndex作为索引）:\n",
      "            sales  visitors\n",
      "2023-01-01    216       129\n",
      "2023-01-02    233       423\n",
      "2023-01-03    157       262\n",
      "2023-01-04    655       252\n",
      "2023-01-05    784       301\n",
      "\n",
      "索引类型: <class 'pandas.core.indexes.datetimes.DatetimeIndex'>\n",
      "\n",
      "============================================================\n",
      "方法1：直接对DatetimeIndex提取属性\n",
      "============================================================\n",
      "            sales  visitors  year  month  day  weekday  quarter\n",
      "2023-01-01    216       129  2023      1    1        6        1\n",
      "2023-01-02    233       423  2023      1    2        0        1\n",
      "2023-01-03    157       262  2023      1    3        1        1\n",
      "2023-01-04    655       252  2023      1    4        2        1\n",
      "2023-01-05    784       301  2023      1    5        3        1\n",
      "\n",
      "============================================================\n",
      "方法2：使用.dt访问器（从索引创建Series）\n",
      "============================================================\n",
      "            year  year_dt  month  month_dt\n",
      "2023-01-01  2023      NaN      1       NaN\n",
      "2023-01-02  2023      NaN      1       NaN\n",
      "2023-01-03  2023      NaN      1       NaN\n",
      "2023-01-04  2023      NaN      1       NaN\n",
      "2023-01-05  2023      NaN      1       NaN\n",
      "\n",
      "注意：两种方法结果相同，但直接访问DatetimeIndex更简洁高效\n",
      "\n",
      "============================================================\n",
      "方法3：DataFrame列是datetime类型时使用.dt访问器\n",
      "============================================================\n",
      "                 date  year_from_col  month_from_col\n",
      "2023-01-01 2023-01-01           2023               1\n",
      "2023-01-02 2023-01-02           2023               1\n",
      "2023-01-03 2023-01-03           2023               1\n",
      "2023-01-04 2023-01-04           2023               1\n",
      "2023-01-05 2023-01-05           2023               1\n",
      "\n",
      "============================================================\n",
      "总结：\n",
      "============================================================\n",
      "1. 当索引是DatetimeIndex时：\n",
      "   - 推荐使用 df.index.year（直接访问，简洁高效）\n",
      "   - 也可以使用 pd.Series(df.index).dt.year（功能相同）\n",
      "\n",
      "2. 当列是datetime类型时：\n",
      "   - 必须使用 df['date'].dt.year（.dt访问器）\n",
      "\n",
      "3. 性能对比：\n",
      "   - 直接访问DatetimeIndex：最快（numpy数组操作）\n",
      "   - .dt访问器：稍慢但功能更丰富（返回Series）\n"
     ]
    }
   ],
   "source": [
    "# ===== 实际应用：DataFrame中使用DatetimeIndex直接提取属性 =====\n",
    "\n",
    "# 创建以DatetimeIndex为索引的DataFrame\n",
    "dates = pd.date_range('2023-01-01', periods=10, freq='D')\n",
    "df = pd.DataFrame({\n",
    "    'sales': np.random.randint(100, 1000, 10),\n",
    "    'visitors': np.random.randint(50, 500, 10)\n",
    "}, index=dates)\n",
    "\n",
    "print(\"DataFrame（DatetimeIndex作为索引）:\")\n",
    "print(df.head())\n",
    "print(f\"\\n索引类型: {type(df.index)}\")\n",
    "\n",
    "# 方法1：直接对DatetimeIndex提取属性\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"方法1：直接对DatetimeIndex提取属性\")\n",
    "print(\"=\"*60)\n",
    "df['year'] = df.index.year\n",
    "df['month'] = df.index.month\n",
    "df['day'] = df.index.day\n",
    "df['weekday'] = df.index.weekday\n",
    "df['quarter'] = df.index.quarter\n",
    "\n",
    "print(df[['sales', 'visitors', 'year', 'month', 'day', 'weekday', 'quarter']].head())\n",
    "\n",
    "# 方法2：使用.dt访问器（需要先转换为Series）\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"方法2：使用.dt访问器（从索引创建Series）\")\n",
    "print(\"=\"*60)\n",
    "df['year_dt'] = pd.Series(df.index).dt.year\n",
    "df['month_dt'] = pd.Series(df.index).dt.month\n",
    "print(df[['year', 'year_dt', 'month', 'month_dt']].head())\n",
    "print(\"\\n注意：两种方法结果相同，但直接访问DatetimeIndex更简洁高效\")\n",
    "\n",
    "# 方法3：在DataFrame列中使用.dt访问器\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"方法3：DataFrame列是datetime类型时使用.dt访问器\")\n",
    "print(\"=\"*60)\n",
    "df['date'] = df.index  # 将索引作为列\n",
    "df['year_from_col'] = df['date'].dt.year\n",
    "df['month_from_col'] = df['date'].dt.month\n",
    "print(df[['date', 'year_from_col', 'month_from_col']].head())\n",
    "\n",
    "# 总结对比\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"总结：\")\n",
    "print(\"=\"*60)\n",
    "print(\"1. 当索引是DatetimeIndex时：\")\n",
    "print(\"   - 推荐使用 df.index.year（直接访问，简洁高效）\")\n",
    "print(\"   - 也可以使用 pd.Series(df.index).dt.year（功能相同）\")\n",
    "print(\"\\n2. 当列是datetime类型时：\")\n",
    "print(\"   - 必须使用 df['date'].dt.year（.dt访问器）\")\n",
    "print(\"\\n3. 性能对比：\")\n",
    "print(\"   - 直接访问DatetimeIndex：最快（numpy数组操作）\")\n",
    "print(\"   - .dt访问器：稍慢但功能更丰富（返回Series）\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 基本日期时间组件提取\n",
    "\n",
    "### 3.1 常用属性\n",
    "\n",
    "`.dt` 访问器提供了丰富的属性来提取日期时间的各个组件：\n",
    "\n",
    "| 属性 | 说明 | 返回值范围 |\n",
    "|------|------|-----------|\n",
    "| `.dt.year` | 年份 | 整数（如 2023） |\n",
    "| `.dt.month` | 月份 | 1-12 |\n",
    "| `.dt.day` | 日期 | 1-31 |\n",
    "| `.dt.hour` | 小时 | 0-23 |\n",
    "| `.dt.minute` | 分钟 | 0-59 |\n",
    "| `.dt.second` | 秒数 | 0-59 |\n",
    "| `.dt.microsecond` | 微秒 | 0-999999 |\n",
    "\n",
    "**注意事项：**\n",
    "- 这些属性返回的都是整数类型的 Series\n",
    "- 如果原始数据没有时间部分，`.dt.hour`、`.dt.minute`、`.dt.second` 会返回 0\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始日期时间:\n",
      "0   2023-06-15 14:30:45\n",
      "1   2023-06-15 15:30:45\n",
      "2   2023-06-15 16:30:45\n",
      "3   2023-06-15 17:30:45\n",
      "4   2023-06-15 18:30:45\n",
      "dtype: datetime64[ns]\n",
      "\n",
      "============================================================\n",
      "日期时间组件:\n",
      "             datetime  year  month  day  hour  minute  second\n",
      "0 2023-06-15 14:30:45  2023      6   15    14      30      45\n",
      "1 2023-06-15 15:30:45  2023      6   15    15      30      45\n",
      "2 2023-06-15 16:30:45  2023      6   15    16      30      45\n",
      "3 2023-06-15 17:30:45  2023      6   15    17      30      45\n",
      "4 2023-06-15 18:30:45  2023      6   15    18      30      45\n",
      "\n",
      "各组件的数据类型:\n",
      "datetime    datetime64[ns]\n",
      "year                 int32\n",
      "month                int32\n",
      "day                  int32\n",
      "hour                 int32\n",
      "minute               int32\n",
      "second               int32\n",
      "dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/9b/jb3nnnqn60x3dtlll6mcf0000000gp/T/ipykernel_62399/3006157284.py:2: FutureWarning: 'H' is deprecated and will be removed in a future version, please use 'h' instead.\n",
      "  datetime_series = pd.Series(pd.date_range('2023-06-15 14:30:45', periods=5, freq='H'))\n"
     ]
    }
   ],
   "source": [
    "# 创建包含时间的日期序列\n",
    "datetime_series = pd.Series(pd.date_range('2023-06-15 14:30:45', periods=5, freq='H'))\n",
    "\n",
    "print(\"原始日期时间:\")\n",
    "print(datetime_series)\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "\n",
    "# 提取基本组件\n",
    "components = pd.DataFrame({\n",
    "    'datetime': datetime_series,\n",
    "    'year': datetime_series.dt.year,\n",
    "    'month': datetime_series.dt.month,\n",
    "    'day': datetime_series.dt.day,\n",
    "    'hour': datetime_series.dt.hour,\n",
    "    'minute': datetime_series.dt.minute,\n",
    "    'second': datetime_series.dt.second\n",
    "})\n",
    "\n",
    "print(\"日期时间组件:\")\n",
    "print(components)\n",
    "print(\"\\n各组件的数据类型:\")\n",
    "print(components.dtypes)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 扩展日期属性\n",
    "\n",
    "### 4.1 星期和日期相关属性\n",
    "\n",
    "除了基本的年月日，我们还可以提取更多有用的日期属性：\n",
    "\n",
    "| 属性 | 说明 | 返回值 |\n",
    "|------|------|--------|\n",
    "| `.dt.weekday` / `.dt.dayofweek` | 星期几 | 0=周一，6=周日 |\n",
    "| `.dt.day_name()` | 星期名称 | Monday, Tuesday... |\n",
    "| `.dt.dayofyear` | 一年中的第几天 | 1-365/366 |\n",
    "| `.dt.quarter` | 季度 | 1-4 |\n",
    "| `.dt.isocalendar().week` | ISO 周数 | 1-53 |\n",
    "\n",
    "**应用场景：**\n",
    "- 分析工作日和周末的差异\n",
    "- 按季度进行数据分组\n",
    "- 计算一年中的进度\n",
    "- 判断是否为周末：`series.dt.weekday >= 5`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "扩展日期属性:\n",
      "             datetime  weekday  dayofweek  day_name  dayofyear  quarter  week  \\\n",
      "0 2023-06-15 14:30:45        3          3  Thursday        166        2    24   \n",
      "1 2023-06-15 15:30:45        3          3  Thursday        166        2    24   \n",
      "2 2023-06-15 16:30:45        3          3  Thursday        166        2    24   \n",
      "3 2023-06-15 17:30:45        3          3  Thursday        166        2    24   \n",
      "4 2023-06-15 18:30:45        3          3  Thursday        166        2    24   \n",
      "\n",
      "   is_weekend  \n",
      "0       False  \n",
      "1       False  \n",
      "2       False  \n",
      "3       False  \n",
      "4       False  \n"
     ]
    }
   ],
   "source": [
    "# 使用之前的datetime_series\n",
    "extended_attrs = pd.DataFrame({\n",
    "    'datetime': datetime_series,\n",
    "    'weekday': datetime_series.dt.weekday,      # 0=Monday, 6=Sunday\n",
    "    'dayofweek': datetime_series.dt.dayofweek,  # 同weekday\n",
    "    'day_name': datetime_series.dt.day_name(),   # 星期名称\n",
    "    'dayofyear': datetime_series.dt.dayofyear,  # 一年中的第几天\n",
    "    'quarter': datetime_series.dt.quarter,      # 季度\n",
    "    'week': datetime_series.dt.isocalendar().week,  # ISO周数\n",
    "    'is_weekend': datetime_series.dt.weekday >= 5  # 是否为周末\n",
    "})\n",
    "\n",
    "print(\"扩展日期属性:\")\n",
    "print(extended_attrs)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 月份和季度相关属性\n",
    "\n",
    "| 属性 | 说明 | 返回值 |\n",
    "|------|------|--------|\n",
    "| `.dt.month_name()` | 月份名称 | January, February... |\n",
    "| `.dt.is_quarter_start` | 是否为季度开始 | True/False |\n",
    "| `.dt.is_quarter_end` | 是否为季度结束 | True/False |\n",
    "| `.dt.is_year_start` | 是否为年度开始 | True/False |\n",
    "| `.dt.is_year_end` | 是否为年度结束 | True/False |\n",
    "\n",
    "**应用场景：**\n",
    "- 识别季度和年度边界\n",
    "- 进行季度级别的数据分析\n",
    "- 生成季度报告\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "月份信息:\n",
      "         date  month_num month_name month_abbr  quarter  is_quarter_start  \\\n",
      "0  2023-01-01          1    January        Jan        1              True   \n",
      "1  2023-02-01          2   February        Feb        1             False   \n",
      "2  2023-03-01          3      March        Mar        1             False   \n",
      "3  2023-04-01          4      April        Apr        2              True   \n",
      "4  2023-05-01          5        May        May        2             False   \n",
      "5  2023-06-01          6       June        Jun        2             False   \n",
      "6  2023-07-01          7       July        Jul        3              True   \n",
      "7  2023-08-01          8     August        Aug        3             False   \n",
      "8  2023-09-01          9  September        Sep        3             False   \n",
      "9  2023-10-01         10    October        Oct        4              True   \n",
      "10 2023-11-01         11   November        Nov        4             False   \n",
      "11 2023-12-01         12   December        Dec        4             False   \n",
      "\n",
      "    is_year_start  \n",
      "0            True  \n",
      "1           False  \n",
      "2           False  \n",
      "3           False  \n",
      "4           False  \n",
      "5           False  \n",
      "6           False  \n",
      "7           False  \n",
      "8           False  \n",
      "9           False  \n",
      "10          False  \n",
      "11          False  \n"
     ]
    }
   ],
   "source": [
    "# 创建12个月的日期数据\n",
    "monthly_dates = pd.Series(pd.date_range('2023-01-01', periods=12, freq='MS'))  # 每月第一天\n",
    "\n",
    "month_info = pd.DataFrame({\n",
    "    'date': monthly_dates,\n",
    "    'month_num': monthly_dates.dt.month,\n",
    "    'month_name': monthly_dates.dt.month_name(),\n",
    "    'month_abbr': monthly_dates.dt.strftime('%b'),  # 月份缩写\n",
    "    'quarter': monthly_dates.dt.quarter,\n",
    "    'is_quarter_start': monthly_dates.dt.is_quarter_start,\n",
    "    'is_year_start': monthly_dates.dt.is_year_start\n",
    "})\n",
    "\n",
    "print(\"月份信息:\")\n",
    "print(month_info)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 日期名称和格式化\n",
    "\n",
    "### 5.1 获取日期名称\n",
    "\n",
    "Pandas 提供了多种方法来获取日期的文本表示：\n",
    "\n",
    "- `.dt.day_name()`: 获取星期名称（Monday, Tuesday...）\n",
    "- `.dt.month_name()`: 获取月份名称（January, February...）\n",
    "- 支持本地化：可以传入 `locale` 参数获取不同语言的名称\n",
    "\n",
    "### 5.2 自定义格式化\n",
    "\n",
    "使用 `.dt.strftime(format)` 可以按照指定格式格式化日期时间。\n",
    "\n",
    "**常用格式化代码：**\n",
    "\n",
    "| 代码 | 说明 | 示例 |\n",
    "|------|------|------|\n",
    "| `%Y` | 四位年份 | 2023 |\n",
    "| `%y` | 两位年份 | 23 |\n",
    "| `%m` | 月份（01-12） | 06 |\n",
    "| `%d` | 日期（01-31） | 15 |\n",
    "| `%H` | 小时（00-23） | 14 |\n",
    "| `%M` | 分钟（00-59） | 30 |\n",
    "| `%S` | 秒数（00-59） | 45 |\n",
    "| `%A` | 完整星期名称 | Monday |\n",
    "| `%a` | 星期缩写 | Mon |\n",
    "| `%B` | 完整月份名称 | January |\n",
    "| `%b` | 月份缩写 | Jan |\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期名称和格式化:\n",
      "        date   day_name day_abbr month_name month_abbr         custom_format1  \\\n",
      "0 2023-06-12     Monday      Mon       June        Jun     2023年06月12日 Monday   \n",
      "1 2023-06-13    Tuesday      Tue       June        Jun    2023年06月13日 Tuesday   \n",
      "2 2023-06-14  Wednesday      Wed       June        Jun  2023年06月14日 Wednesday   \n",
      "3 2023-06-15   Thursday      Thu       June        Jun   2023年06月15日 Thursday   \n",
      "4 2023-06-16     Friday      Fri       June        Jun     2023年06月16日 Friday   \n",
      "5 2023-06-17   Saturday      Sat       June        Jun   2023年06月17日 Saturday   \n",
      "6 2023-06-18     Sunday      Sun       June        Jun     2023年06月18日 Sunday   \n",
      "\n",
      "        custom_format2 custom_format3  \n",
      "0  2023-06-12 00:00:00  June 12, 2023  \n",
      "1  2023-06-13 00:00:00  June 13, 2023  \n",
      "2  2023-06-14 00:00:00  June 14, 2023  \n",
      "3  2023-06-15 00:00:00  June 15, 2023  \n",
      "4  2023-06-16 00:00:00  June 16, 2023  \n",
      "5  2023-06-17 00:00:00  June 17, 2023  \n",
      "6  2023-06-18 00:00:00  June 18, 2023  \n"
     ]
    }
   ],
   "source": [
    "# 创建一周的日期\n",
    "week_dates = pd.Series(pd.date_range('2023-06-12', periods=7, freq='D'))  # 从周一开始\n",
    "\n",
    "date_names = pd.DataFrame({\n",
    "    'date': week_dates,\n",
    "    'day_name': week_dates.dt.day_name(),        # 星期名称\n",
    "    'day_abbr': week_dates.dt.strftime('%a'),   # 星期缩写\n",
    "    'month_name': week_dates.dt.month_name(),    # 月份名称\n",
    "    'month_abbr': week_dates.dt.strftime('%b'),  # 月份缩写\n",
    "    'custom_format1': week_dates.dt.strftime('%Y年%m月%d日 %A'),  # 中文格式\n",
    "    'custom_format2': week_dates.dt.strftime('%Y-%m-%d %H:%M:%S'),  # 标准格式\n",
    "    'custom_format3': week_dates.dt.strftime('%B %d, %Y')  # 英文格式\n",
    "})\n",
    "\n",
    "print(\"日期名称和格式化:\")\n",
    "print(date_names)\n",
    "\n",
    "# 注意：locale参数需要系统支持相应的语言包\n",
    "# 如果系统支持，可以尝试：\n",
    "# date_names['day_name_zh'] = week_dates.dt.day_name(locale='zh_CN')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 特殊日期判断\n",
    "\n",
    "### 6.1 月初、月末、季度初、季度末判断\n",
    "\n",
    "Pandas 提供了多个布尔属性来判断特殊日期：\n",
    "\n",
    "| 属性 | 说明 |\n",
    "|------|------|\n",
    "| `.dt.is_month_start` | 是否为月初 |\n",
    "| `.dt.is_month_end` | 是否为月末 |\n",
    "| `.dt.is_quarter_start` | 是否为季度初 |\n",
    "| `.dt.is_quarter_end` | 是否为季度末 |\n",
    "| `.dt.is_year_start` | 是否为年初 |\n",
    "| `.dt.is_year_end` | 是否为年末 |\n",
    "\n",
    "**应用场景：**\n",
    "- 识别月末、季末、年末等关键时间点\n",
    "- 在财务分析中识别报表日期\n",
    "- 在数据分析中识别时间周期边界\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特殊日期判断:\n",
      "        date  is_month_start  is_month_end  is_quarter_start  is_quarter_end  \\\n",
      "0 2023-01-01            True         False              True           False   \n",
      "1 2023-03-31           False          True             False            True   \n",
      "2 2023-04-01            True         False              True           False   \n",
      "3 2023-06-30           False          True             False            True   \n",
      "4 2023-07-01            True         False              True           False   \n",
      "5 2023-12-31           False          True             False            True   \n",
      "\n",
      "   is_year_start  is_year_end  \n",
      "0           True        False  \n",
      "1          False        False  \n",
      "2          False        False  \n",
      "3          False        False  \n",
      "4          False        False  \n",
      "5          False         True  \n"
     ]
    }
   ],
   "source": [
    "# 创建包含各种特殊日期的序列\n",
    "special_dates = pd.Series([\n",
    "    '2023-01-01',  # 年初\n",
    "    '2023-03-31',  # 季度末\n",
    "    '2023-04-01',  # 季度初\n",
    "    '2023-06-30',  # 月末\n",
    "    '2023-07-01',  # 月初\n",
    "    '2023-12-31'   # 年末\n",
    "])\n",
    "\n",
    "special_dates = pd.to_datetime(special_dates)\n",
    "\n",
    "special_checks = pd.DataFrame({\n",
    "    'date': special_dates,\n",
    "    'is_month_start': special_dates.dt.is_month_start,\n",
    "    'is_month_end': special_dates.dt.is_month_end,\n",
    "    'is_quarter_start': special_dates.dt.is_quarter_start,\n",
    "    'is_quarter_end': special_dates.dt.is_quarter_end,\n",
    "    'is_year_start': special_dates.dt.is_year_start,\n",
    "    'is_year_end': special_dates.dt.is_year_end\n",
    "})\n",
    "\n",
    "print(\"特殊日期判断:\")\n",
    "print(special_checks)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.2 闰年判断\n",
    "\n",
    "使用 `.dt.is_leap_year` 可以判断是否为闰年。\n",
    "\n",
    "**闰年规则：**\n",
    "- 能被4整除但不能被100整除的年份\n",
    "- 能被400整除的年份\n",
    "\n",
    "**应用场景：**\n",
    "- 计算年度天数（365或366）\n",
    "- 处理跨年数据时需要考虑闰年\n",
    "- 日期计算和验证\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "闰年信息:\n",
      "   year  is_leap_year  days_in_year\n",
      "0  2020          True           366\n",
      "1  2021         False           365\n",
      "2  2022         False           365\n",
      "3  2023         False           365\n",
      "4  2024          True           366\n",
      "5  2025         False           365\n"
     ]
    }
   ],
   "source": [
    "# 检查2020-2024年的闰年情况\n",
    "years_to_check = pd.Series(pd.date_range('2020-01-01', '2025-01-01', freq='YS'))\n",
    "\n",
    "leap_year_info = pd.DataFrame({\n",
    "    'year': years_to_check.dt.year,\n",
    "    'is_leap_year': years_to_check.dt.is_leap_year,\n",
    "    'days_in_year': years_to_check.dt.is_leap_year.map({True: 366, False: 365})\n",
    "})\n",
    "\n",
    "print(\"闰年信息:\")\n",
    "print(leap_year_info)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 时间周期属性\n",
    "\n",
    "时间周期属性对于时间序列分析非常重要，可以帮助我们理解数据在时间维度上的分布模式。\n",
    "\n",
    "**常用时间周期属性：**\n",
    "- `.dt.dayofyear`: 一年中的第几天（1-365/366）\n",
    "- `.dt.isocalendar().week`: ISO 周数（1-53）\n",
    "- `.dt.quarter`: 季度（1-4）\n",
    "- `.dt.month`: 月份（1-12）\n",
    "- `.dt.weekday`: 星期几（0-6）\n",
    "\n",
    "**应用场景：**\n",
    "- 按不同时间周期进行数据统计\n",
    "- 分析时间分布模式\n",
    "- 进行时间序列分析\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "时间周期统计:\n",
      "总天数: 365\n",
      "\n",
      "季度分布:\n",
      "quarter\n",
      "1    90\n",
      "2    91\n",
      "3    92\n",
      "4    92\n",
      "Name: count, dtype: int64\n",
      "\n",
      "月份分布:\n",
      "month\n",
      "1     31\n",
      "2     28\n",
      "3     31\n",
      "4     30\n",
      "5     31\n",
      "6     30\n",
      "7     31\n",
      "8     31\n",
      "9     30\n",
      "10    31\n",
      "11    30\n",
      "12    31\n",
      "Name: count, dtype: int64\n",
      "\n",
      "星期分布:\n",
      "weekday\n",
      "0    52\n",
      "1    52\n",
      "2    52\n",
      "3    52\n",
      "4    52\n",
      "5    52\n",
      "6    53\n",
      "Name: count, dtype: int64\n",
      "\n",
      "周数范围: 1 - 52\n"
     ]
    }
   ],
   "source": [
    "# 创建一年的日期数据\n",
    "year_dates = pd.Series(pd.date_range('2023-01-01', '2023-12-31', freq='D'))\n",
    "\n",
    "# 提取时间周期属性\n",
    "time_periods = pd.DataFrame({\n",
    "    'date': year_dates,\n",
    "    'dayofyear': year_dates.dt.dayofyear,\n",
    "    'weekofyear': year_dates.dt.isocalendar().week,\n",
    "    'quarter': year_dates.dt.quarter,\n",
    "    'month': year_dates.dt.month,\n",
    "    'weekday': year_dates.dt.weekday\n",
    "})\n",
    "\n",
    "print(\"时间周期统计:\")\n",
    "print(f\"总天数: {len(time_periods)}\")\n",
    "print(f\"\\n季度分布:\")\n",
    "print(time_periods['quarter'].value_counts().sort_index())\n",
    "print(f\"\\n月份分布:\")\n",
    "print(time_periods['month'].value_counts().sort_index())\n",
    "print(f\"\\n星期分布:\")\n",
    "print(time_periods['weekday'].value_counts().sort_index())\n",
    "print(f\"\\n周数范围: {time_periods['weekofyear'].min()} - {time_periods['weekofyear'].max()}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. 实际应用示例：电商销售数据分析\n",
    "\n",
    "### 8.1 数据准备\n",
    "\n",
    "在这个示例中，我们将模拟一个电商平台的销售数据，包含：\n",
    "- **季节性效应**：使用正弦函数模拟季节性波动\n",
    "- **周末效应**：周末销售额更高\n",
    "- **特殊月份效应**：11月（双11）和12月（圣诞）销售额显著提升\n",
    "- **随机噪声**：模拟真实数据的不确定性\n",
    "\n",
    "然后使用 `.dt` 访问器提取各种日期属性，进行多维度分析。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "销售数据示例（前10行）:\n",
      "        date        sales  year  month  quarter  weekday  is_weekend  \\\n",
      "0 2023-01-01  1349.671415  2023      1        1        6        True   \n",
      "1 2023-01-02   989.616241  2023      1        1        0       False   \n",
      "2 2023-01-03  1071.653176  2023      1        1        1       False   \n",
      "3 2023-01-04  1162.626919  2023      1        1        2       False   \n",
      "4 2023-01-05   990.345148  2023      1        1        3       False   \n",
      "5 2023-01-06   993.779264  2023      1        1        4       False   \n",
      "6 2023-01-07  1478.541621  2023      1        1        5        True   \n",
      "7 2023-01-08  1400.785082  2023      1        1        6        True   \n",
      "8 2023-01-09   980.508316  2023      1        1        0       False   \n",
      "9 2023-01-10  1085.117768  2023      1        1        1       False   \n",
      "\n",
      "  month_name   day_name  dayofyear  \n",
      "0    January     Sunday          1  \n",
      "1    January     Monday          2  \n",
      "2    January    Tuesday          3  \n",
      "3    January  Wednesday          4  \n",
      "4    January   Thursday          5  \n",
      "5    January     Friday          6  \n",
      "6    January   Saturday          7  \n",
      "7    January     Sunday          8  \n",
      "8    January     Monday          9  \n",
      "9    January    Tuesday         10  \n",
      "\n",
      "数据总行数: 365\n"
     ]
    }
   ],
   "source": [
    "# 模拟电商销售数据分析\n",
    "np.random.seed(42)\n",
    "dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')\n",
    "\n",
    "# 模拟销售数据（考虑季节性和周末效应）\n",
    "base_sales = 1000\n",
    "seasonal_effect = 200 * np.sin(2 * np.pi * np.arange(len(dates)) / 365) + 300 * (np.arange(len(dates)) > 330)  # 年末促销\n",
    "weekend_effect = np.where(pd.Series(dates).dt.weekday >= 5, 300, 0)\n",
    "monthly_effect = pd.Series(dates).dt.month.map({11: 500, 12: 800}).fillna(0)  # 双11和圣诞\n",
    "noise = np.random.normal(0, 100, len(dates))\n",
    "\n",
    "sales = base_sales + seasonal_effect + weekend_effect + monthly_effect + noise\n",
    "\n",
    "sales_df = pd.DataFrame({\n",
    "    'date': dates,\n",
    "    'sales': sales\n",
    "})\n",
    "\n",
    "# 提取日期属性进行分析\n",
    "sales_df['year'] = sales_df['date'].dt.year\n",
    "sales_df['month'] = sales_df['date'].dt.month\n",
    "sales_df['quarter'] = sales_df['date'].dt.quarter\n",
    "sales_df['weekday'] = sales_df['date'].dt.weekday\n",
    "sales_df['is_weekend'] = sales_df['date'].dt.weekday >= 5\n",
    "sales_df['month_name'] = sales_df['date'].dt.month_name()\n",
    "sales_df['day_name'] = sales_df['date'].dt.day_name()\n",
    "sales_df['dayofyear'] = sales_df['date'].dt.dayofyear\n",
    "\n",
    "print(\"销售数据示例（前10行）:\")\n",
    "print(sales_df.head(10))\n",
    "print(f\"\\n数据总行数: {len(sales_df)}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8.2 按时间维度进行数据分析\n",
    "\n",
    "**分析方法：**\n",
    "- 使用 `groupby()` 按不同的时间属性分组\n",
    "- 计算各组的统计指标（平均值、总和、计数等）\n",
    "- 使用 `reindex()` 对结果进行排序，使其按时间顺序显示\n",
    "\n",
    "**分析维度：**\n",
    "1. **月度分析**：按月份统计平均销售额，识别销售旺季\n",
    "2. **星期分析**：按星期统计，识别工作日和周末的销售差异\n",
    "3. **季度分析**：按季度统计，了解季度销售趋势\n",
    "4. **工作日vs周末**：对比工作日和周末的销售表现\n",
    "\n",
    "**关键技巧：**\n",
    "- 使用 `reindex()` 确保时间顺序正确\n",
    "- 使用 `agg()` 同时计算多个统计指标\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "============================================================\n",
      "按月份分析平均销售额:\n",
      "============================================================\n",
      "month_name\n",
      "January      1117.42\n",
      "February     1208.72\n",
      "March        1270.80\n",
      "April        1290.64\n",
      "May          1213.23\n",
      "June         1166.19\n",
      "July         1061.09\n",
      "August        938.25\n",
      "September     890.79\n",
      "October       901.88\n",
      "November     1491.31\n",
      "December     2137.70\n",
      "Name: sales, dtype: float64\n",
      "\n",
      "============================================================\n",
      "按星期分析平均销售额:\n",
      "============================================================\n",
      "day_name\n",
      "Monday       1138.40\n",
      "Tuesday      1113.68\n",
      "Wednesday    1144.72\n",
      "Thursday     1132.13\n",
      "Friday       1147.37\n",
      "Saturday     1454.69\n",
      "Sunday       1434.95\n",
      "Name: sales, dtype: float64\n",
      "\n",
      "============================================================\n",
      "按季度分析:\n",
      "============================================================\n",
      "           平均销售额       总销售额  天数\n",
      "quarter                        \n",
      "1        1198.65  107878.80  90\n",
      "2        1223.24  111314.82  91\n",
      "3         964.17   88703.30  92\n",
      "4        1510.50  138966.13  92\n",
      "\n",
      "============================================================\n",
      "工作日vs周末对比:\n",
      "============================================================\n",
      "       平均销售额     标准差   天数\n",
      "工作日  1135.26  334.75  260\n",
      "周末   1444.72  346.45  105\n"
     ]
    }
   ],
   "source": [
    "# 按月份分析平均销售额\n",
    "print(\"=\"*60)\n",
    "print(\"按月份分析平均销售额:\")\n",
    "print(\"=\"*60)\n",
    "monthly_sales = sales_df.groupby('month_name')['sales'].mean().reindex([\n",
    "    'January', 'February', 'March', 'April', 'May', 'June',\n",
    "    'July', 'August', 'September', 'October', 'November', 'December'\n",
    "])\n",
    "print(monthly_sales.round(2))\n",
    "\n",
    "# 按星期分析平均销售额\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"按星期分析平均销售额:\")\n",
    "print(\"=\"*60)\n",
    "weekday_sales = sales_df.groupby('day_name')['sales'].mean().reindex([\n",
    "    'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'\n",
    "])\n",
    "print(weekday_sales.round(2))\n",
    "\n",
    "# 按季度分析\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"按季度分析:\")\n",
    "print(\"=\"*60)\n",
    "quarterly_stats = sales_df.groupby('quarter')['sales'].agg(['mean', 'sum', 'count']).round(2)\n",
    "quarterly_stats.columns = ['平均销售额', '总销售额', '天数']\n",
    "print(quarterly_stats)\n",
    "\n",
    "# 工作日vs周末对比\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"工作日vs周末对比:\")\n",
    "print(\"=\"*60)\n",
    "weekend_comparison = sales_df.groupby('is_weekend')['sales'].agg(['mean', 'std', 'count']).round(2)\n",
    "weekend_comparison.index = ['工作日', '周末']\n",
    "weekend_comparison.columns = ['平均销售额', '标准差', '天数']\n",
    "print(weekend_comparison)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8.3 可视化时间模式\n",
    "\n",
    "通过图表直观展示不同时间维度的销售模式，帮助识别：\n",
    "- 月度销售趋势\n",
    "- 星期销售模式\n",
    "- 季度销售对比\n",
    "- 工作日与周末的差异\n",
    "\n",
    "**可视化技巧：**\n",
    "- 使用 `plt.subplots()` 创建多个子图\n",
    "- 使用 `plot(kind='bar')` 创建柱状图\n",
    "- 使用 `tick_params()` 调整标签角度\n",
    "- 使用 `tight_layout()` 优化布局\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAPdCAYAAABlRyFLAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XlclFX///E3i4HgkKSYkpSZd2UCdWtauSSK5UJ6F5nilrmRpVTiUpZZZuZyYwuWlZJK5XbncpuaWalpUt5iZoDaopm7LCKrgsBcvz/8MV8nmESDGZhez8djHnqdcy3nc1jmzIdzncvFMAxDAAAAAAAAAACgDFdHNwAAAAAAAAAAgOqKJDoAAAAAAAAAADaQRAcAAAAAAAAAwAaS6AAAAAAAAAAA2EASHQAAAAAAAAAAG0iiAwAAAAAAAABgA0l0AAAAAAAAAABsIIkOAHAKhmE4ugkAAACATcXFxcrIyHB0Myyqw/jZMIxq0Q4AuBSS6ABQQ506dUouLi7asWOHQ9vx/vvv6+TJkxXa99SpUwoMDFRqaqql7PDhw5b/N27cWIsWLZIkpaen68SJE+WeZ8yYMfrmm2+syl5//XV17Njxkm1IT09XRESEjhw5UqE2AwAAAFfimWeeUbdu3Szbu3btkp+fn/Ly8ip8jk8++UQPPfSQZbuwsNAy9j5w4IBcXFz0+++/S5J++uknnT9/vsw5CgoK1LdvXx0/ftyq/KGHHtILL7xwyTZ8/PHHqlOnjlVZ+/bt9fLLL1u2H3vsMQ0cOLCiYUmSioqK5OrqqrVr12r+/PnasGGDSkpKLuscAGAvJNEBwI5+//13ubi4/OmrdBBcqqioSD/99FOZ14EDByRdSEL/se6XX36xOseMGTMued2LXxcPiC/WsGFDffzxx5bt7OxsPfHEE9qzZ0+F4k9ISNDx48dVv359SdKaNWvUvHlz7dq1q8y+L7/8skaMGFGmPCUlRbGxsfL19bUq/89//qOgoKBLtqF+/fqqX7++HnnkEcsg/euvv7bZF02aNKlQbAAAAHA+r776aoXGz++9995lnXfdunVlzvHYY4+V2W/btm1WieXnnntOHTt21JkzZ6z2M5vN6tOnj956660y5/jggw+UkJBgGYNLF8bxGzZs0D//+c/Lavdvv/2mAwcOqKCgQJmZmTpw4IAOHDig3Nxc5eXl6cCBAxWerFKrVi15eXnp4MGD+t///qeIiAh16tRJaWlpl9UmALAHd0c3AAD+jlavXq1bb73Vqmz37t0aMGBAmX2PHz+u5s2b2zxXREREmTIPDw8VFBRYtiMjI3X77berbt26luRzVlaW7rnnHq1YsUItWrSQJB07dkyFhYW66667KhTH559/LsMw5Ovrq59++smqztXVVTfffLNV2Zo1a5SVlSV39wtvP+3atdOQIUP0yCOPWCX+t2/frnnz5mndunVlrjl69GiZzeZyE+Y7d+7UO++8Y1W2YcMGdevWTcXFxapVq5ZVXe3atWU2mzVgwADt379fkjRv3jxt3LhRK1eulKQyxwAAAODvJTQ0VG+//bbN+q5du5Yp8/T0VGFhoSTJxcXFqs5kMunhhx/WVVddpR9//FGSNGHChDLnMAxDa9eu1eHDhy3nGD9+vOrUqaPRo0drypQpln3//e9/69ChQxoyZIjVOTIyMjR58mRlZmbK09OzzDUeeeSRMmXnzp0rd19Juu222yxxff/995ozZ45V/Zo1a3TLLbeU+WxgyzXXXCNXV1fFxcVp8uTJGjt2bLmz6QHA0UiiA4ADNGnSpEwS/VLrI/76669q1qyZtm7dqpdffllbtmyx1K1Zs0YffPCBPv3003KP9fLy0osvvijpwmwWLy8vy/VuuOEGS1vmzZunxMTEMkul2PLhhx9Kku65555yr5mfn2/ZzsnJ0apVq/T+++/r3nvvtezj6+urZcuWWWa4nz59WmPGjNGAAQPKfCCZPn26tm7dqqlTp6p3796W8hUrVujdd9/Vpk2byrQjICDAajs+Pl4//PCDBg0aJC8vL02cOFG1a9fWF198IbPZrGXLlik4OFiff/65JKlPnz4V6gsAAAA4p02bNv3ppJbyJCUladq0afrtt980f/58SdKPP/6oiIgIff/999q/f7/WrVtnGYf7+PiUOceWLVt04sQJ7dy5UyaTSdKFuyoffPBBdejQQYMGDbK0b+LEifrggw+sZpubzWY9+uijyszM1MaNG3X99ddb6iZMmCA3NzdNnz69zHU9PDwkXRiXp6en6+TJkzIMQz/99JPeeustXXfddYqJidGtt96qBx54QNKFMbbZbNaQIUOsln4ZOHCgFi9e/Kd99cwzz+iZZ56xbK9YscIyEQYAqguS6ADgAL///nuZ2R2Xuu0xNTVV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IMl66ZeKuPi6kizJ+PJmgY8aNUpvvfWWJOn9999XQUGBvL29NXjwYM2aNeuyritdWJqm9HOFp6enVqxYYVk3vbCwULVq1dJ3331nc5lIAKgOSKIDgB2dPHlSkhQeHl7hY86dOydJ+vXXX8tdr/yPStdBLDV58mSrhHOpzMxM3XLLLfrqq68sDwK62B8ffFqquLhYq1evVq1atSyD36ysLG3cuFFr1qxRRkaG+vTpo6uuuspyzB133KH9+/dLkiIiItS+fXuNHj1aXl5e6t+/v1566SXL8i6l16hVq1a517/tttv01FNPqW3btn/eEf9faUJ88+bNevLJJ/Xbb79pzJgxGjJkiIqKijR//nzddtttlv1PnTpl8yFQAAAA+Ps4e/asoqKiNHv2bKuHdtqaid6kSRNJF8bjP//8s86cOaP8/HzLw0MPHz4sSfrll1+UmpoqFxcXy12gpQ/6LBUZGakHH3xQ58+f1+23325ZvqVu3bqaNm2a5dlBpb766ivdd999ZWK46qqrdPvtt+vVV19V/fr1KxR36cSUjIwMzZw5U23bttWPP/6ofv36adWqVdq3b5+mT5+u6dOnlzm2vOVc/oyHh4fat2+vdevWkUQHUK2RRAcAO0pMTJSXl5cyMjJUu3Ztqzpba6KnpaVJku677z4VFRVpwoQJ+vjjj7VlyxbLgy+3b9+u8PBw9e/fv8zxXl5efzqz+uqrr77kgNpsNuubb77R2bNn9fjjj6tWrVoaM2aM9u3bpw0bNmj79u3y8PBQjx49NHbsWP30009WSXhPT0/Lw4I8PT1Vv359q4cHZWRkWD5cSLLctlqe4OBgjR079k/bW2rLli26++67LccNGDBAkydP1qxZs6xm0bz++uuW///www+Wh44CAADg76moqEj9+/dX7dq11atXL8ta5LbUq1fPMv4tLCy0WsLlj8u5tGrVSvfcc48aN26slJQUSdZrokvSNddco2uuucayZvr111+vW2+91dKOI0eOWI2fjx49Wm67/P395enpWaGlZyTrCTmRkZHy8vLS8OHDFRUVpXbt2unGG2/UiBEjLPv069dP3bt3t1rapaJLsxQVFSk9PV29e/fWpEmT9Pbbb1tNxAGA6sT10rsAACqD2WzW22+/rQcffLBMAv3P/Prrr2rYsKFq164td3d3zZo1S23btlVoaKi2bNmiqVOn6v7779fAgQMVGxtb6e1OT0/XjTfeqJCQEAUGBuqdd97RqVOnVLduXb355ptq1qyZVq1apYyMDP3nP/9R165dlZWVZXM99YuVDtLfeecdNW/e3PK6+KGi5bnnnnu0f/9+m6/SDyMXq1+/vsaMGSPpwoOXDMPQli1bLPWhoaE6cuSIvv32W2VnZ2vZsmV69dVXLTOKAAAA8PeRlZUld3d3LV++XN26dbMaq2ZkZGjChAlWZbNnz7Yc6+npKcMwZBiG3nrrLW3cuFHHjh3ThAkTlJmZKcMwdOedd1qtUV5RpePnwYMHW13/4oeKlufpp5/+0/HzggULyhzzr3/9S4sXL5bJZLKURUdHW113z549mj59ulWZraUk8/LyZBiG3n//fXXo0EE+Pj4aM2aMBgwYIMMwLA9gXbx48WUt9QgA9sBMdACwk5deekm///671q1bd1nHff7555bZ1JLk7u6u2NhYderUSffff78kaeTIkYqJibF6eFBl8fPzU2xsrG655Rar2eNjxoxRdHR0uQ8H/f3339W4cWOb58zMzNQrr7yi5ORkSbqs5VykCx9M/iy5/Wcz2aWya0JK0ty5c9W1a1ddc801evrppzVixAiZTCY99thjf3ouAAAAOB8/Pz+tWLFCknTgwAGruoYNGyomJqbM7PE/2rlzp5577jmtXr3asvzhJ598ou3bt2vz5s2WpREr4ueff9bHH3+sG264QZIqvJxLqbp16/7p+PnQoUNlykrXXS/tB0latmyZli1bpuPHjyssLEytWrXSoUOHVLt2bS1btswq4S5dWMLmjTfe0Pbt27Vnzx55enqqoKBA999/v1599VXddddd8vT01LPPPqtXXnlFffr00fbt23XixAmNGjWqIl0DAHbBTHQAsIOFCxdq2rRpmj17tm6++Warup9//ll79+7VL7/8IklWifCff/5ZGzZs0P33369169Zp+vTp6tSpk2688Ub5+PjojTfeUGRkpJYsWSI/Pz/16dNHr732mlauXGlZX7Ey/Otf/7JKoJe2szSBfv78eUVFRenNN9/UG2+8oZUrV6pz587lnuv48eOaM2eO1q1bV2bGzPnz57V//37t2rVL0oU1EsuzZcsW1a5d2+brUrPgly1bZpl1s2LFCo0ePVotWrTQoUOHNH/+fDVv3lybN2+Wi4uL2rZtW+6HCgAAADg3FxeXcl+pqakaNGhQuXWlEzC+++47devWTePGjVPXrl3VokULfffdd7r22msVFRWlvXv36uGHH1ZaWpp++uknnT59utyx7/HjxyVJTz75pM6cOaMHH3zQqj4zM1O//vqrUlJS/nQplClTpvzp+PniNd9tKS4u1nfffafo6Gjddtttateund577z0tW7ZMWVlZuvXWWzVjxgzt37/fMmP+6quv1uHDh9W3b18lJCQoKytLX375pV588UV17NjRsgTOuHHjdNNNN6lHjx5au3atOnXqVJEvEQDYDTPRAaCKbdiwQUOHDtXYsWMVFRVVpn7JkiV65ZVX5OLiok6dOum6666z1H3//fe688471aZNG91///2644471L59e82aNUutW7e27PfGG2/o008/VUJCgj799FMdPnzYMsvbHq666iqdPn1aS5YsUXFxscLDw63WSrzY7Nmzdc0116hLly6SpGnTplnq3NzcFBISovT0dHXp0kWtWrUq9xzt2rXTxx9/bLM9JSUlatasmc36G264wfJHgaysLL3//vu6/fbbFRsbq3vvvdcS0yeffKJHH320QkvTAAAAwLns37//so+5+uqrdeLECXXr1k2jR4/WK6+8YqmrXbu2vvjiCz377LO6++671bp1a33++ecKCwtTgwYNNHHixDLnu+mmmywPNr14TfRSx48fV3BwsK666qo/fW7Q2LFjNXr0aJv1CQkJl5xZn56erscff1z33HOPtm/frqCgIElSgwYN9M0332j16tVavHixlixZok2bNsnPz09169bV6tWr//S80oW7bT/99FP17dtX2dnZGjRo0CWPAQB7cjEufmoEAKDSGYahzz77TGFhYVd0fHFxsdzd+ZtnqfPnz8tsNls9uPSv+u6773T33XeXuzQNAAAAcLlSU1N17bXXlltXUlKiEydOKCAgwC5tOXfunNzd3f90uUQAwJ8jiQ4AAAAAAAAAgA2siQ4AAAAAAAAAgA0k0QEAAAAAAAAAsIEkOgAAAAAAAAAANvCkunKYzWadOHFCJpOJh8wBAACgUhiGodzcXPn7+8vVlbksl4PxOQAAAKpCRcfoJNHLYc+nZAMAAODv5ejRo2rcuLGjm1GjMD4HAABAVbrUGJ0kejlMJpOkC53n4+Pj4NYAAADAGeTk5CggIMAy1kTFMT4HAABAVajoGJ0kejlKbxH18fFh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dJOqhKurqw4fPqzCwkK5uvKrsSYo/b1w5swZ5efnO7g19nPo0CElJibqoYceUr169XTixIm/1Yx0wzDk5uamvXv3avbs2crOznZ0ky6b2WyWu7u7zGaz4uLiauR73OUym81ydXWVYRg6cuSIXFxcHN2kSlNSUmKJLS0tzdHNgRP5O437q6PSseGJEycYG1Yjbm5u+vXXX7VixQpHN8VplX7v/+c//5HkPJ9rq5O/w9ivpin9mpw+fVoZGRkObs3fg4uLi2XsXFM+GzAaqIEyMzP19ttvKyEhwdFNqVJ//IGqaW80bm5uMpvNeu211zR79mwlJiY6ukmXraCgQOHh4Tp69KieeeYZ9erVS2vXrtWUKVMc3bRKV1RUpFGjRikqKsrRTal05Q18a9rPU3kMw1B2drbatGlj+X3oDHFdSseOHdWlSxetWbNGzZo1k7+/v6666qq/xSw5wzDk4uKi1NRUPfHEE6pbt66uvvpqRzfrslycTO7atas+++yzGjNovFLFxcWWmFu2bKlFixY5zfdrcXGx3NzcZBiG7r77bq1cudJpYkP18HcZ91dHhYWFeuGFFxQTEyOJ2ejVyZo1azRr1ixlZmY6uilOa86cOZo8ebKkC59rUblcXFx08uRJy52Jf4fPMDVBVlaWevbsqaSkJEl8Xapafn6+7r//fr3zzjuObkqFkUSvAf74g9u8eXP16tVL3333nSTn/cvwuXPndPfdd2v27NmSas5fpt59913L/wMDA7VhwwbNnj1bL7zwguWv+TXFkSNHNHLkSPn6+mr37t169tln1bt3b61bt87pEulubm669957dfr0aUuZM7xplpSUWP6g89FHH2n27Nnatm1bjZy9+0eurq66+uqr1aFDB8XGxiovL6/G/J64Ehd/P1599dUaNmyY6tWrp6FDhyo/P1+urq5O+35QqvSPq127dlW9evUUGRlZ45IapcnkmJgYlZSUaNWqVZKc971cktWs+9atW2vy5MlOM6uzNLaFCxfqn//8p5544gmniQ2O8Xcd91cnpV8DDw8P3Xjjjdq9e7ek//v9Dce4+P3+zjvv1Llz53T48OEydagcL774ory8vDRv3jxHN8XpGIahoqIitW3bVlOnTpVUc3IdzszFxUV169bVddddp2nTpqm4uJivSxVzcXHRPffco2PHjkmqGb/LGeVXc6Wz7k6fPq2zZ89KupA8adu2rf79738rLS3Naf8yXLt2bQ0aNEgHDx5UYWFhjfiB+uGHHzR16lT169dPH3zwgTp37qxvvvlGu3fvlq+vrxYsWFBjEuklJSW6+eab1bZtW7355pt68skn9dlnn2n8+PGWRHpNXtrlj99Prq6uGjhwoL7++mu9/fbbkmr+YKZ02Quz2axWrVrp448/1p49ezR8+HCNGzdOv/32m6ObeNnKe8DtI488ooKCAqWnp0uqGW++l6ukpEQuLi7KyMjQiRMndN9992n+/Pnq06ePDh48qKioKMvX21mVJi7Onz+vf/zjH9qwYYO+//57ubq61rj1xX/66Sdt3rxZ33zzjebPny9JltnMzur999/X448/rgMHDig3N9fRzalU//73vzV8+HAVFhZKIsmJv6b0d31BQYGkv8+4vzooHT9cPP574YUXdOzYMf373/8uUwf7KH1vLP2ZkKSQkBDdfvvtGj9+vIqKivjj5V9U2sf5+fk6d+6cJOmqq65S586da+Td1NWdi4uLatWqpfHjxyspKUknT550dJP+tspb/3/ChAlyd3fXnj17rPbBX/fHMbKXl5d69OihN954Q4mJiTXid3n1b+HfWGnS5OTJk2revLkiIiL06quvSpKioqLUtWtXxcXFyWw2O8UH7/I+dLZp00affPKJ9u3bVyN+oG699VbNnTtXhw8f1uTJk9W8eXNJUsOGDfXWW2+pTp06+vDDD/XRRx85uKV/zmw2y83NTcnJyRo8eLBuvPFGPfDAA3rppZesEumfffZZjX3YqKurqw4dOqSHH35YSUlJSk1Nlb+/v6ZMmaJvv/1WGRkZNf7nqvSD3lNPPaVbb71VGzdu1EcffaRrr71Wp06dkq+vr4NbWHEFBQU6fPiwatWqpf379+uDDz7Qjz/+KEnq3r27CgoK9MILL0hSjfhdcTlKfx737NmjTp06qV27dlq5cqUkqX///ho+fLh+/vlnPfbYY3rkkUe0Zs0aB7e4cpW+N5Qmyhs3bqwFCxaoV69euu+++/Tbb7/J3d29Wicu/9i25s2bKy4uTo888og++eQTy2z0mrh0mS1/jPmJJ57QK6+8oq+//lqff/55tf56Xcof2/7ss89q5MiR+uSTT5SYmEiSE1fMMAzl5uYqKChI4eHhTj3ur45K14EODw/Xrl27dObMGXl6eurJJ5/UTz/9pPPnz9P3DuDi4qJTp04pKChIL774omVpo+eee06enp5KTk6WRKLrr3BxcdGxY8fUrVs3Pf7440pKSlLt2rU1YsQIrVixQuvXr3d0E2u88sY9gYGB+vnnny0Tm/j9Yn+urq767bff9O6772rfvn2SpBYtWqiwsFBxcXGWfVA53NzcdODAAc2cOVNZWVkqLi5Wz549NXjwYC1ZskQFBQXV/ueA74ZqqjRpsnfvXj399NN67bXXdNttt2np0qUKDAzUnDlz5OHhodTUVLm6utb4D96l8f7888+aMWOGDh48KEkKCwtTeHi4XnvtNeXl5Tm4lbaVvinWrl1bDz74oCZMmKC6detq6dKlln0aNmyouXPn6vz581qzZk21nonn6uqqkydP6uOPP1bnzp01YMAAjRgxQvfcc4+mTJmizz77TBMmTNB9992nrKysGvW9d3Fbf//9dx06dEh9+vTRiBEj9OWXXyo4OFg//fSTjh07VuN/rkr9/vvv6tq1qyRp0KBBysvL0+LFizVgwABt3LjRwa27NLPZrOeff169e/fWwYMHlZCQoClTpqhv37564YUXdOrUKcXGxur8+fPauXOno5tb6VxdXXXw4EF169ZN48eP148//qjnn39eu3bt0u7duzVo0CA99dRTOn36tH7//Xf16NHD0U2uNBe/F/br108PPfSQevTooQMHDmjWrFnq0qWL2rRpo0OHDlnuuqhuLl5Safz48Xrsscc0fvx4HTlyRG+//bbq16+vuLg4/fe//5XkHLMcS9cJN5vN2rRpkxYsWKDU1FRNmjRJU6ZM0cCBA7Vq1aoamUi/eA30Xbt2ad26dSouLtabb76pAQMG6P7772fWHi7bxTOgTSaTVq9erTvuuEOLFy92ynF/dXNxXyYnJ+vMmTPq0aOHnnrqKf33v/9Vt27d9OmnnyohIcEpfkfXFBe/p7u7u2v06NH69NNPNX78eA0YMECurq5KT0+3/CGaRNflu7iPGzdurG7dulmWVH3mmWd06NAhTZkyRV9++aXOnz9fLcdZNUVpruPZZ5/V9u3bJUn33nuvunbtqnHjxiknJ4ffL3Z08e/9+Ph4vfPOO+rUqZNeffVVpaWlad68efr+++95HkklKe1vwzD01Vdf6cUXX1SvXr0UHR2tzMxMtW3bVvv27bOsxFGtxzgGqq3Dhw8bTz31lDFjxgzDMAzj/Pnzxrlz54xx48YZgwcPNkwmk+Hi4mLMmzfPwS39a0pKSgzDMIyDBw8akydPNjw9PY17773X6N+/v3H8+HHjk08+Mfr372+cPHnSav/qoqioyDCMC+1avHix8eabbxq7du0yVq9ebdxyyy1GRESE1f5paWnG0aNHHdHUCsvPzzcCAgKMhg0bGps3b7aUp6SkGFFRUcZdd91l/Oc//zHMZrNhNpsNwzAs/1ZnxcXFhmEYRkZGhvHrr79aytesWWNER0cbderUMcaPH2/Ur1/f+Ne//mXk5+c7qqlXrDTGUufOnTMeeOAB4/XXXzeGDx9uBAcHG4WFhYZhGEbbtm2NXbt2OaKZl23lypVGeHi40aNHDyMtLc04c+aM8eGHHxr/+Mc/jC5duhidOnUyOnfubCxevNjRTa0SixYtMgYOHGgUFRUZSUlJxu233240b97cuOaaa4zXX3/dMAzDyMnJsfwclv5ecgY///yzUa9ePeOFF14wdu3aZTz44IPGddddZ+zZs8dIS0szwsPDDRcXF+PEiROObqpNJSUlRsuWLY0+ffoYsbGxxuTJkw0XFxdj7969RkpKijFo0CDjnnvuMdauXevopv5lpd+DJSUlRqtWrYzu3bsbd9xxh9GpUydj/PjxhmEYxoQJE4w6deoYH330UbV7T/8zpW0tKSkx2rRpY9x3333GzTffbLRt29Z47733jJycHOPRRx81GjRoYCQkJDi4tagpSt+3f/nlF2Py5MlGXFyckZqaahiGYRQWFhrR0dFONe6vbkr7//Tp08bBgwct5StXrjTGjRtn1KlTx3j66aeNoKAgo0+fPjVybFgTlX5djhw5YqxatcpITk42DMMwjh8/bnz11VdG69atjV69ehlt2rQxGjZsaKlHxZX28e+//24sW7bM2LZtm6Xu448/NkaOHGlcd911RoMGDYzbbrvNOHXqlGEYNeMzX3VycX99/vnnRkBAgNGmTRvj/vvvN5KSkozNmzcbI0aMMP73v/8ZhlH9ch3OqPR7Pzs72/L/s2fPGnFxccadd95ptGnTxujevbvRs2dPIz4+3jAMvi5/RWkf5+TkGDk5OYZhGEZeXp4RExNjhISEGE2bNjVee+01w93d3XjppZcc2NKKIYleTZ07d84ICwszvL29ja+++spSViozM9NYvXq10aFDByMyMtIoKSmp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/v3h6uoKtVqN+Ph4xMbGwtDQ8HvsBhGR3mI6FyIiIiIiIiKidExEkJiY+FnrqlQqhIaGonz58ti5cydq166tLHv37h0aN26MkSNHwsHBAYULF0aBAgVw8uRJlCxZ8ltVn4hI7zGITkRERERERESUwYSGhiJnzpwpyt+/f49cuXLBwIAZfomIPheD6EREREREREREREREaeBjRyIiIiIiIiIiIiKiNDCITkRERERERERERESUBgbRiYiIiIiIiIiIiIjSwCA6EREREREREREREVEaGEQnIiIiIiIiIiIiIkoDg+hERERERERERERERGlgEJ2IiIiIiIiIiIiIKA0MohMRERERERERERERpYFBdCIiIiIiIiIiIiKiNDCITkRERERERERERESUBgbRiYiIiIiIiIiIiIjSwCA6EREREREREREREVEaGEQnIiIiIiIiIiIiIkoDg+hEROmMWq3WdRX0kojougpEREREpMdiY2MRGhqq62oQEVE6xCA6EdF3kJiYqAR5RQSxsbEICwvD48ePcfHiRWzatAkjRoxA9erVYWdnh9jY2L99zTdv3kClUuHSpUvfuvqftHz5crx+/fqz1n3z5g0qVqyIwMBApez58+fK/wsXLox169YBAIKCghAQEJDq6/j4+ODs2bNaZXPnzkWdOnX+tg5BQUHw9PSEv7//Z9WZiIiIiDKu9u3bY+fOnQCAM2fOoECBAggLC9NxrXTr0aNHUKlUuHHjxmdv4+zsjGPHjim/P3v2TPl/x44d0aVLF+X3W7dupfoaq1atwrJly7TKrly5ggIFCvzt/YaIoG/fvjh69Ohn15mI6EswiE5E9B0cP34cBgYGMDQ0hIGBATJnzoycOXOiZMmS8PLywoYNGxASEoIePXpgw4YNyJQpk7JtfHw87t27l+Ln0aNHAJKC0B8ve/Dggdbfnz59OlQq1Wf/jB8/PtX9KFCgADZt2qT8HhYWhh9//PGzG9jnz5/Hq1evYG5uDgDYt28fypUrhytXrqRYd/z48ejZs2eK8jt37mDhwoXIlSuXVvmOHTtQqVKlv62Dubk5zM3N0bp1ayQmJgIATp06leaxKFas2GftGxERERHpl8DAQOzYsQM5c+YEkBREt7CwQI4cOT77NZ49e5ZqWz35z7cMyjs5OX1RO19zD/E1vXv3DqdOnULu3LkBAC9fvoSVlRUWL16cYt2dO3fCyckpRaehmJgYTJgwQWmfJ1/f3NwcBQsW/GQdVCoVateujbZt2+Lly5da5Wn9JA/0ExH9HSNdV4CI6L+gXr16ePbsmZKqxdTUFA8ePECdOnXg5+enNNxT8+rVK5QrVy7N5Z6eninKTExMEBMTo/zu7e2NypUrI2fOnErwOTQ0FA4ODti1axcqVKgAIKnBGxsbi+rVq3/Wfv3+++8QEeTKlQv37t3TWmZgYIDSpUtrle3btw+hoaEwMkq6/NSsWRNdu3ZF69attQL/586dw4oVK/Dbb7+l+Jv9+vWDWq1ONWD+xx9/pGisHzp0CA0aNEBCQgKMjY21lpmamkKtVqNDhw7466+/AAArVqzA4cOHsXv3bgBIsQ0RERER6d7bt28RHBz82esXK1YMmTNn1ipbvXo1ChUqBBcXF4gItm7dCg8Pjy+qR/PmzXHz5s1PrrN27VqtnthfW+/evTFw4MBPrvPq1Su4urqmKH/06BESEhK0yjQjNp89e5bimAFA2bJltX7fv38/AMDW1lYp27JlC7y8vFC3bl2lLDAwEMOGDUOvXr1gYmKi9RpTp07Fy5cv0a9fP/Tr1y/F31SpVFq/Dx8+HNOnTwcAODo64vz588qy4sWLAwBKlSqltPFv3LiBTp064ezZs8q91w8//JDi7xARpYVBdCKib+zGjRuoUqVKmss/7lGtER8frwSbAeDhw4coWbIkTp8+jfHjx+PkyZPKsn379mH16tVKA/ZjZmZmGDNmDICkHjZmZmZ49+4dAKBo0aJKQ3jFihXw8/NLkSolLRs2bAAAODg4pPo3P3z4oPweHh6OPXv2YPny5ahdu7ayTq5cubBt2zalh/v79+/h4+ODDh06oH79+lqvOW3aNJw+fRqTJk1Cq1atlPJdu3Zh6dKlOH78eIp6WFhYaP2+fv16XL9+HZ06dYKZmRlGjhwJU1NTHDlyBGq1Gtu2bYOVlRV+//13AECbNm0+61gQERER0fczdepULFiw4LPXv3jxIuzt7ZXfo6KiMG/ePPTp0wcGBgY4fPgwHj9+jFmzZmHWrFmpvsa8efMwaNCgFOXjxo1LcyTnpzrLfC158uRBnjx58P79ewDAwYMHsWvXLqxZswZAUucWS0vLVLe1t7dXtvtYixYtUi3/eC6idevWoXv37hgyZIhSVrZsWaxdu1YJdANAq1atkDVrVowaNUpr+zNnzmD69Olwd3fHzJkzlXJ/f3/Ur18fx44dSxHwzpMnj9bvffv2RaFChWBjY4NixYph7969WL9+Pe7evQt/f3/s2bMHRYsWVVJh1qhRg51liOiLMIhORPSNlStXTukBAQBHjx6Fj48PihQpgqdPn6JIkSJISEjA1q1bkS9fPmW95AF0IKnnRkJCAu7cuYOrV69q9fy+ffu2VlnOnDlRoEABZXnmzJlx5MgR2NnZYcCAAVi1alWKet6/fx9LlizB9u3bUyx78OAB4uLikJCQgJcvX+LOnTuIjIzEoUOHsG/fPjRt2lRr/f3796Njx45aZbNmzYKBgYFWwN3U1BTZsmXDxo0bUaNGDYwZMwZ58uTB9u3b4eTkpLX9+vXr8dNPP8HQ0BCTJ0/WapAnJCQgLi4OVatWTbGN5gGBoaEhtm7dirdv32LJkiVo1aoVzMzM0LlzZ5QtWxYVK1ZUho++fv0ahw8fBgBUrVoVhQoVSnFMiIiIiEh35s+fj/nz52uVrVu3Dl27dkV0dHSqPaiTmzt3Lt69ewcLCwuICEaNGoWcOXMiU6ZM6N+/v1aHDY38+fN/zV34qubMmYMZM2ZolWlGs2bJkgV37txJdTtNx5rkHj16hFKlSuH69euwtrb+5N89ceIEzp49i/79+ytlpqamAIApU6YgR44cmDhxIgBgyZIlyJEjB7Jly6ase/36dbRs2RJqtRqHDh3CiRMnlGWaYH3Tpk21eqL36NFD672fMGECwsLC0LVrV0ydOhXFihWDvb09HBwcMHnyZK2ONj4+PgCASZMmwc7O7pP7RkSUHIPoRETfmImJCcqWLYvY2FhMmTIF06ZNg52dHaZOnQpnZ2ccPHgQzZs3R/fu3bF9+3bY2Nik+jqTJk1SArsAUk3xoinr3r17ikB57ty5sX79etSqVQs9evRAyZIllWVhYWHw8PBAgwYN0KxZsxSvO2jQIAQEBCAsLAxLly7F+vXrERkZCScnpxQBdA1DQ0Pl/3fv3sXcuXMRGxsLKysrqFQqGBgYwNfXF+fPn9caftm1a1fl/ydPnoSTkxOioqKwaNEijBs3DmvWrMGPP/6Itm3bKutt374dP//8M86dO6dVh7x58yr/V6lUyJcvH7p164a4uDg4OjoCSHrgEBISAgDYs2cPTExM8OzZMzRq1AhlypRJdd+IiIiISH89ePAAU6ZMgYFB0jRxK1euxLVr1zBp0iSsWrUKBQoUSJGy5GuqV68egoKCcP36da3ytm3b4t69e7h58yaCgoIwdOhQ/P7774iMjESpUqUwcuTIVEdJGhgYYPr06Uonk2XLlmH27Nla+c/Tyv+dmJiIoKAgrTJNYP39+/d48+aN1rI8efIoPbijoqLQv39/GBgYoG3bthARGBoaomrVqnB1dcWUKVO0tl2/fj0A7Z77q1atgq2tLXLnzo3o6GjMmzdPWf/58+dwcnLC4cOHUbhwYaU8eRAeAMqUKQMnJyeEh4drpYLRzNs0bNgwtG3bFvv374eXl5fW/QYR0efixKJERN9YUFAQ5s6dC0tLS0yaNAleXl44ceIEsmbNCiApF98ff/yB8uXLw97eHiNHjkx1SOWiRYsgIti7dy+yZMkCEVF+Vq5ciaJFiyq/p9bTHEjKQd6oUSOtXioigubNmyMxMRFr165NdbuDBw/ixo0byJMnD6ZMmYKtW7eibNmyMDMzSzFBz6pVq6BWq7WC6PPmzUOVKlUQFxeH6tWrY+zYsUhISFDq0bdvX/z111/Kz8c9ZczMzHD58mWMHTsWADBixAgUL15c+RkxYgRevXqlVVa8eHH8+uuvymts374djRo1Qr169fD+/XsEBQWhZMmS+PHHH5V1ChYsiAcPHmDLli0oVqxYityLRERERKTfoqOj0b59e9SsWRMWFhZ48OABBg8ejKpVq2LYsGEAgJ49e6Zo4yZPBfOxd+/epTmpqGZOpOS8vLxw48YNrTmBIiMj8euvvyqjOTXrLF26FL/++iuqVKkCT09PXLhwIcXrZcqUCY8fP1b+ZmBgIOLj47XqkXy+pORevHiBggULav1oRo66urqmWHb58mVl27179+L169d4+fIlhg0bhjp16iAhIUFJmVKtWjWtNv5ff/2VosPQ4sWLcfDgQWTKlAm//PKLVlteMzK1Vq1aWuWjR49Wtv/zzz9hb28PU1NT3LhxA4mJifDw8ICjoyMqVqwIICl9poGBASZMmIAiRYooPeWJiL4Ee6ITEX1D0dHRKF26NEJDQ1GpUiWMGDECrq6uePbsGTJlyoRDhw4hICAABgYGmDFjBjw8PDBnzhwsXLgQHTp0wIoVK1J93Q8fPihBeCApnUny9C3JRUVFISoqSvl9yJAhyJUrlzIRU3h4OGbMmAEjIyMkJiYqPU8yZ86s9TeSs7a2xtGjR/H69WuEhYVpLStYsCCOHDmilY5m4cKFCAwMVG4i1Go1EhISvihIrekpBCQF5ZOni9m0aRPmzp2La9euaW2TPXt25f/ly5fH7Nmz4efnh0KFCiFLlizIkSNHipyMarU6RSodIiIiIsoYJk6ciLt37+LKlSto1KgRDAwM0LBhQyxcuBCZMmUCgBTz7wD4ZOB18eLFKSa3/5QWLVoga9as2LZtm9JJZO/evYiNjUX79u0BAOfOncOYMWOUvOR16tRB7ty5U+QjFxGYmJjAxcUFz58/11qWfOTqzp07U61LkSJFlFGZANCnTx/cvXsXN2/eRLVq1ZA1a1bs2bNHWZ68F3iHDh1ga2uLvHnzKp15Pp6k9HNo2vmtWrXC0qVLlfKnT5/Czs4O165d05rnKPl7YWFhga5duyJ37txwdHSEqakpQkND8ccff2h16tHchyQvIyL6EowSEBF9Q6ampliwYAEKFy6M2rVrp5mbUZOLe+3atbh16xauXLmilMXHxyv/Pnr0CKVLl8bFixdTvIahoSEePXqklaYFSLpR+Dg/YnKurq6plnfu3Bnr1q375P5peqQkp1arERsbqxWIvnnzplYu9MuXL2PSpEmoU6cOgC+/8fD19dWauEhEoFarU32QULFiRdy4cQOVKlVCxYoVsWTJEuzevRvVqlXD3bt3Ubx4cSxbtkxZPyoqCmZmZp9dFyIiIiLSH2PGjEGDBg1Qvnx5AEDJkiW15toB8MXpXL50YtEsWbKgRYsW2L59uxJE37p1K5ydnZUJNOvWrYsxY8bg8uXLaNiwIerXr4/Zs2eneK0PHz7AxMQEDx48wJMnT1Ktg7m5OSIjI1NdZmBgoNTx999/xy+//IJdu3ahcePG+Omnn9C6dWucPXsW7u7uqW5vbW2N2NhY5XdNqpfRo0fDz88v1RSUab3W7t27sXfv3hTl1apVS3X9wMBA5MmTB5MmTcKJEyeQN29e5MiRA0WLFkX16tXh6+urrBsVFQVTU1OONCWif4xBdCKib8zLy0v5/8c9M65du4bp06dj9+7dGDFiBDp16gQAWhNkRkdHAwAePnyYar7yj33cO2Xs2LFaAWeN4OBglClTBseOHUPlypVTLE8r4J+QkIC9e/fC2NgYTZo0AQCEhobi8OHD2LdvH969e4c2bdooPXmApMa1ZnJVT09PODo6ol+/fjAzM0P79u1T3HgkJCQoDfCPlS9fHgMGDECNGjU+fSD+nyYgfuLECfTp0wdPnjyBj48Punbtivj4eKxcuVK5iQKAN2/eIFeuXJ/12kRERESkX8zMzJSOHGl58+YN7t27l6K8VKlSX60ns5eXFzZu3Ig7d+6gQIECOHr0qFZKxk2bNmHGjBnYtGmT0hPcyckJK1eu1Oo0ExoaCjMzMzx58iTVgDWQFOTv0qXLJ+tz+/ZttGvXDjNmzECxYsUAJPVSHzVqFLp27YoLFy6gdOnSKba7desW1Go15s6dixs3bmDDhg1K/evUqYNTp05pra+Zl+hjRYoUgbe399/WM7kcOXLA398f3bp1w/Hjx9G0aVNMmDABmTNnxuHDh2Fubo4//vgDANv4RPTvMYhORPSNBQQEIDw8PNVltra2KF26NLZs2YLKlSvj4cOHyjJzc3OYm5vj7du3AAA3NzfEx8dj2LBh2LRpE06ePKlMfHnu3Dl4eHgowz+TMzMz+2TP6hw5csDc3PyT+6BWq3H27FlERUWhV69eMDY2ho+PD+7evYtDhw7h3LlzMDExQaNGjeDr64t79+5pBeEzZ86s9ObJnDkzzM3NtXr3aPJIamh64afGyspKq1fJp5w8eVLJX2llZYUOHTpg7NixmDlzJmbOnKmsN3fuXOX/169fT7NxT0REREQZ35gxYzBmzJgU5S9evNCa4PLfqFu3Ln744Qds374dhQoVgrGxMTw8PJTl2bJlw+TJkzF58mQ8ePAA+/fvx/jx49G3b18cPnwYQFJnm2fPnmnV6eM6fk679o8//kCzZs3QvHlz9O/fX+n8AiQdi0uXLqF+/frYt28frKystLbVBNZz584NMzMzrTZ+VFRUiocRmg5CH6tRowYaNmyI5cuX/219k3fAKVy4MBo1aoRnz55h//792L9/v7Le0aNHlf9fv379q713RPTfxCA6EdE3NmDAAOzevTvN5Q8ePICnp2eK8tGjR2Py5Ml4+PAhChQooOT+mzlzJp48eQIXFxds3LgR586dw7Rp09C7d2/Mnz//q9c/KCgIVatWhb+/PxwcHNCtWzd4enpi+fLlmDNnDho3bozBgwfDzc1NCZxfunQpzXzqyWl6zX9pOhcHBwesWbMmzeWJiYnKREIa5ubm8PHxwdixY3Hx4kXY29vj1KlTcHZ2BgC4uLjA398fFy5cQKVKlbBt2zZMnjxZ6YlDREREROlDTExMqulJNGXv37+HiYlJiuW5c+fWmmcnLStXrkSPHj0+uz4fdwhJLrWJRYGkNCrt27fHnj17UKBAATRv3lzJNx4YGAhbW1vMmzcPrVu3RunSpTFkyBCcPn0aL168UF7jwoULSExMRPny5ZU5kB4/fqx1bNIKWgNJoz8XL16M4cOHo0uXLkp7PHnKEwMDA+zevRvt27eHvb09Jk+ejB9//PGTOeI1bfwvTediaGiIO3fupPm6QFIe9uQMDAwwePBgbNmyBdOmTcOIESO09sHGxgYFChTAokWLUKVKFcycORMdOnSApaXlJ/8OEdHHGEQnIvrGdu3aleYylUqFo0ePppmXHEjKTajpTQ0ARkZGWLhwIZydnVGvXj0AQO/evTF79uzPuin4Unnz5sXChQtRpkwZrZ4lPj4+GDx4cKp5BT/uEfOx4OBgTJw4Ebdv3waQMo/kp9K5AEm92T8V3P5UT3YAWvnZNZYsWYL69esjd+7cGDhwIHr27Ils2bJ90ZBSIiIiIvr2li1bBh8fnzSXp9UOffr06TfpIPGlHUI0vLy8MGvWLDx48AD79u1TyvPnz49SpUrBx8cHHz58QPHixXH58mX8/vvvWm3m1atXw9raGkWKFFGC+E5OTin+TlpB6zZt2uDIkSOYNWsW+vfvr5R/3L43MzPDnj17MGPGDIwbNw6//PILzpw5k+L14uPjsW7dOsycORMeHh5flM5F4+/en7RSTgLAyJEjMXLkSK2yMWPGoGPHjnj16hU2bNiA7du3Y82aNdi8efMn/w4R0ccYRCci+s4CAwMRFBSkBLw/NbnN/fv3cejQISxYsAC//fYbbt++jSNHjuDMmTOwsrLCvHnz8Ndff2HLli3YsmUL6tevD2tra5QpUwZ16tT52zQtnyu1XOzJA/ZxcXHw9fWFpaUlRAS7d+/G1KlTU32tV69e4eeff0a1atUwYcIETJkyRet1Hj9+jLCwMABItQcRkJSm5VO9X/7Otm3blDzwf/75J/r164d169YhPj4eO3fuRLly5XDixAk0b94cNWrUwOHDh1G8ePF//PeIiIiI6Ovp3bs3Onbs+MXb5c6d+xvU5ssnFtWoWLEirK2tERAQoHSO0di5cydGjx6Nn376Ce/fv0eRIkUwffp05eHB1atXsWPHDmV0ZtmyZVPMjQQAERERePXqlZKiJXkQetKkSZgzZ06Kdm5q9ycGBgYYOXIkunXrluoogFevXuHChQvw9/fH4MGD8f79e63l9+/fBwC8ffs2zTZ+YmLiZ7Xx3dzcUi0fPHgwevbsCSBpdMD+/fvRqVMnvHnzBoMGDULdunVRt25dTJo0CXXq1MGuXbvQoEGDv/17REQAg+hERN/dkydPUKNGDRgbG8PKygq2trZprnv16lVUrVoVdnZ2qFevHqytreHo6IiZM2dqzVI/b9487N+/H+fPn8f+/fvx/PlzpZf395ApUya8f/8eW7ZsQUJCAjw8PJQG7MfmzJmD3LlzK73vkwfRDQ0N4eTkhKCgILi6uqZ5bGrWrIlNmzalWZ/ExEStCZc+VrRoUaVXfWhoKJYvX47KlStj4cKFqF27trJPO3fuhJeX12elpiEiIiKi7yNz5syf7JH8PVWpUgVFihRJc3mDBg1gYWGR5vLr16+nWm5ubv7J/OCLFi2Cvb393z5MiImJgbW1NeLj4+Hl5aXVS79ChQqpbvOpTj758+dH/vz5U5T7+PjA2dkZnTp1grGxMX766Set5aNGjcKePXtQsmRJtG7dOtXXNjQ0xKNHjz65P2ltCySNoNW08SMjI9G8eXMYGRlhxYoVWvcmY8aMQWBgIHLkyPHJv0VElJxKUntUSURE6UZCQgKMjPjMUyMuLg5qtfqr3jhpcqR/6oaBiIiIiCi9SEhIQGho6FcbeapriYmJiImJQZYsWb7aa16/fh1ly5b9VyNYiYg0GEQnIiIiIiIiIiIiIkrD15+BjoiIiIiIiIiIiIgog2AQnYiIiIiIiIiIiIgoDQyiExERERERERERERGlgTPVpUKtViMgIADZsmXjJHNERERE9FWICCIiIlCoUCEYGLAvy5dg+5yIiIiIvoXPbaMziJ6KgIAAWFhY6LoaRERERJQBvXjxAoULF9Z1NfQK2+dERERE9C39XRudQfRUZMuWDUDSwcuePbuOa0NEREREGUF4eDgsLCyUtiZ9PrbPiYiIiOhb+Nw2OoPoqdAMEc2ePTsb6URERET0VTEdyZdj+5yIiIiIvqW/a6MzGSMRERERERERERERURoYRCciIiIiIiIiIiIiSgOD6EREREREREREREREaWAQnYiIiIiIiIiIiIgoDQyiExERERERERERERGlgUF0IiIiIiIiIiIiIqI0MIhORERERERERERERJQGBtGJiIiIiIiIiIiIiNLAIDoRERERERERERERURoYRCciIiIiIiIiIiIiSgOD6EREREREREREREREaWAQnYiIiIiIiIiIiIgoDQyiExERERERERERERGlgUF0IiIiIiIiIiIiIqI0MIhORERERERERERERJQGBtGJiIiIiIiIiIiIiNJgpOsKEBEREf1XqSaodF2FDEXGia6rQERERBmNiu01SqeEbd/viT3RiYiIiIiIiIiIiIjSwCA6EREREREREREREVEaGEQnIiIiIiIiIiIiIkoDg+hERERERERERERERGlgEJ2IiIiIiIiIiIiIKA0MohMRERERERERERERpYFBdCIiIiIiIiIiIiKiNDCITkREREREWt69e4cSJUrg1KlTKZZFRkaidOnSGD9+vFb5+vXrUaJECZiZmcHGxgbnz59XliUmJmLIkCHImzcvsmXLBnd3dwQEBHzjvSAiIiIi+joYRCciIiIiIsX58+dRo0YNPH36NNXlvXv3xpMnT7TKTp8+jb59+2LVqlWIiIhA165d0bhxY7x//x4AMGXKFBw4cAB+fn4IDAxE9uzZ0bZt22++L0REREREX4ORritARERERETpw7p16zBu3DjMnTsXrVq1SrF89erVePPmDWrUqKFVvmrVKrRr1w5169YFAPTv3x8LFy7E3r170aNHD6xcuRLTp09HsWLFAAAzZsyAhYUFHj16hJIlS6b4O7GxsYiNjVV+Dw8PBwCo1Wqo1eqvtbtERER/z4D9TymdYpvoq/jctiWD6EREREREBABo0KABOnbsCCOjlLcJd+/exaRJk3Dx4kW0a9dOa9nt27fRvXt3rbJKlSrhzp07CA0NxcuXL2FlZaUsK1y4MHLlyoU7d+6kGkSfNm0aJkyYkKI8KCgIMTEx/3T3iIiIvpytra5rQJS6t291XYMMISIi4rPWYxCdiIiIiIgAAAUKFEi1PDo6Gp6enliyZAkKFiyYYnlERASyZMmiVZYlSxZERkYqNyZpLU/NyJEjMXjwYOX38PBwWFhYIG/evMiePfsX7RMREdG/cvWqrmtAlLp8+XRdgwwhc+bMn7Ueg+hERERERPRJ/fv3h6urKxo1apTq8mzZsuHDhw9aZR8+fIC5uTmyZcum/P7xcs2yj5mYmMDExCRFuYGBAQw4rJ6IiL4npsyg9Iptoq/ic9uWPNpERERERPRJmzdvxurVq5EzZ07kzJkT586dw/Tp05UULRUqVMDt27e1trl16xYqVqyInDlzolChQlrLX758iZCQEFSsWPG77gcRERER0T/BIDoREREREX1SdHQ0wsLCEBoaitDQUDg6OmLEiBG4desWAKBbt27YunUrLl26hPj4eMyePRvBwcHw8PBQlk+fPh2vX79GeHg4fHx84OTkBEtLS13uFhERERHRZ2E6FyIiIiIi+ldcXFwwZ84ceHp6IjAwEBUrVsShQ4eQK1cuAMDYsWMRFhaGihUrIjY2Fq6urti2bZuOa01ERERE9HlUIiK6rkR6Ex4ejhw5ciAsLIwTFxEREdE3o5qg0nUVMhQZl76btWxj/nM8dkREpDMqttconWJI96v43HYm07kQEREREREREREREaWBQXQiIiIiIiIiIiIiojQwiE5ERERERERERERElAYG0YmIiIiIiIiIiIiI0sAgOhERERERERERERFRGhhEJyIiIiIiIiIiIiJKg86D6O/evUOJEiVw6tSpFMsiIyNRunRpjB8/Xqt8/fr1KFGiBMzMzGBjY4Pz588ryxITEzFkyBDkzZsX2bJlg7u7OwICAr7xXhARERERERERERFRRqTTIPr58+dRo0YNPH36NNXlvXv3xpMnT7TKTp8+jb59+2LVqlWIiIhA165d0bhxY7x//x4AMGXKFBw4cAB+fn4IDAxE9uzZ0bZt22++L0RERERERERERESU8Rjp6g+vW7cO48aNw9y5c9GqVasUy1evXo03b96gRo0aWuWrVq1Cu3btULduXQBA//79sXDhQuzduxc9evTAypUrMX36dBQrVgwAMGPGDFhYWODRo0coWbJkqnWJjY1FbGys8nt4eDgAQK1WQ61Wf43dJSIiIkrBQPeDAjOU9N5uS+/1IyIiIiKi1OksiN6gQQN07NgRRkYpq3D37l1MmjQJFy9eRLt27bSW3b59G927d9cqq1SpEu7cuYPQ0FC8fPkSVlZWyrLChQsjV65cuHPnTppB9GnTpmHChAkpyoOCghATE/NPdo+IiIjob9lmt9V1FTKUt2/f6roKnxQREaHrKhARERER0T+gsyB6gQIFUi2Pjo6Gp6cnlixZgoIFC6ZYHhERgSxZsmiVZcmSBZGRkcqNSVrL0zJy5EgMHjxY+T08PBwWFhbImzcvsmfP/tn7RERERPQlroZf1XUVMpR8+fLpugqflDlzZl1XgYiIiIiI/gGdBdHT0r9/f7i6uqJRo0apLs+WLRs+fPigVfbhwweYm5sjW7Zsyu8fL9csS42JiQlMTExSlBsYGMDAgMOsiYiI6NtQg+k9vqb03m5L7/UjIiIiIqLUpbuW/ObNm7F69WrkzJkTOXPmxLlz5zB9+nQlRUuFChVw+/ZtrW1u3bqFihUrImfOnChUqJDW8pcvXyIkJAQVK1b8rvtBRERERERERERERPov3QXRo6OjERYWhtDQUISGhsLR0REjRozArVu3AADdunXD1q1bcenSJcTHx2P27NkIDg6Gh4eHsnz69Ol4/fo1wsPD4ePjAycnJ1haWupyt4iIiIiIiIiIiIhID6W7dC5/x8XFBXPmzIGnpycCAwNRsWJFHDp0CLly5QIAjB07FmFhYahYsSJiY2Ph6uqKbdu26bjWRERERERERERERKSPVCIiuq5EehMeHo4cOXIgLCyME4sSERHRN6OaoNJ1FTIUGZe+m7VsY/5zPHZERKQzKrbXKJ1iSPer+Nx2ZrpL50JERERERERERERElF4wiE5ERERERERERERElAYG0YmIiIiIiIiIiIiI0sAgOhERERERERERERFRGhhEJyIiIiIiIiIiIiJKA4PoRERERERERERERERpYBCdiIiIiIiIiIiIiCgNDKITEREREREREREREaWBQXQiIiIiIiIiIiIiojQwiE5ERERERERERERElAYG0YmIiIiIiIiIiIiI0sAgOhERERERERERERFRGhhEJyIiIiIiIiIiIiJKA4PoRERERERERERERERpYBCdiIiIiIiIiIiIiCgNDKITEREREREREREREaWBQXQiIiIiIiIiIiIiojQwiE5ERERERERERERElAYG0YmIiIiIiIiIiIiI0sAgOhERERERERERERFRGhhEJyIiIiIiIiIiIiJKA4PoRERERERERERERERpYBCdiIiIiIiIiIiIiCgNDKITEREREREREREREaWBQXQiIiIiIiIiIiIiojQwiE5ERERERFrevXuHEiVK4NSpU0rZ5s2bUbFiRWTPnh2lSpXCzz//rLXN+vXrUaJECZiZmcHGxgbnz59XliUmJmLIkCHImzcvsmXLBnd3dwQEBHyv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MTFReXl5SklJUUhIiFavXq2NGzcqLCysQ2oFAAAAOpsv1ugAAABAT3XGe6J31u2hF1xwgd56661W2+Lj47Vnzx7D12ZmZiozM7OjSgMAAAAshS1cAAAAgI7TZoh+5MgRHTlypMXC3GazeR7fPQ4AAACg47BGBwAAADpPm9u5fPLJJ54P5VyzZo02b96smpoaPfvss3K73XrzzTfldrs1cuRISdIVV1yh5ubmjq0aAAAA6MFYowMAAACdp80r0ceMGaN9+/bp0Ucf1YsvvqjRo0frnnvuUWNjo6ZNm6awsDC999573l804Ix3iQEAAADQTqzRAQAAgM7TrpV07969lZeXp8suu0zZ2dl6++23FRwc3NG1AQAAADDAGh0AAADoHGd0OUpqaqouuugiFucAAACARbBGBwAAADpWmyH64cOH9eijj+quu+7S1VdfrUsvvVQ7duxo9Vybzaa4uDj17dvX9EIBAAAAnMIaHQAAAOg8bYboffv21YUXXqhJkyZp9OjRevnll5WQkKARI0Zoz549Gj58uOfP6upqBQUFqbi4uDNqBwAAAHok1ugAAABA5/Fr6wS73a5HHnlEe/bskb+/v2pra2Wz2bRz50653W7Pn0VFRSoqKlJpaWln1A0AAAD0WKzRAQAAgM7T5pXo//mf/ymbzSZJcrvduummmzxtNpvN0yZJ/v7+mjt3bgeUCQAAAOA01ugAAABA52kzRH/xxRc9/71371799Kc/1dixY70W5qf16dNHDz74oKkFAgAAAPDGGh0AAADoPG2G6FdffbVKSkr0y1/+UiUlJVq7dq3cbrcWLFjg+VOS509JeuCBBzquYgAAAKCHY40OAAAAdJ42Q/SvvvpKo0eP1oMPPqh3331XQUFBuuuuu/Txxx97/fnRRx/J7Xa3evULAAAAAPOwRgcAAAA6T5sh+rnnnqtPPvlEUVFRmjlzpg4dOqSKigqtX79e5513nt5//32dd955GjVqlK666ir2WwQAAAA6GGt0AAAAoPP4teekyMhIud1uSVJjY6M++eQT/fvf/1Zzc7MOHTqkf//735o6dap+//vf6+DBgx1aMAAAAADW6AAAAEBnafNK9MmTJ8vlcslms+nw4cOSpH//+9+65JJLVFNTo3HjxsnP71QW73K59Prrr+s3v/lNhxYNAAAA9GSs0QEAAIDO02aIPnXqVBUV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",
      "text/plain": [
       "<Figure size 1500x1000 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化时间模式\n",
    "fig, axes = plt.subplots(2, 2, figsize=(15, 10))\n",
    "\n",
    "# 月度销售趋势\n",
    "monthly_sales.plot(kind='bar', ax=axes[0,0], title='月度平均销售额', color='steelblue')\n",
    "axes[0,0].set_ylabel('销售额')\n",
    "axes[0,0].set_xlabel('月份')\n",
    "axes[0,0].tick_params(axis='x', rotation=45)\n",
    "axes[0,0].grid(axis='y', alpha=0.3)\n",
    "\n",
    "# 星期销售模式\n",
    "weekday_sales.plot(kind='bar', ax=axes[0,1], title='星期销售模式', color='orange')\n",
    "axes[0,1].set_ylabel('销售额')\n",
    "axes[0,1].set_xlabel('星期')\n",
    "axes[0,1].tick_params(axis='x', rotation=45)\n",
    "axes[0,1].grid(axis='y', alpha=0.3)\n",
    "\n",
    "# 季度销售对比\n",
    "quarterly_stats['平均销售额'].plot(kind='bar', ax=axes[1,0], title='季度平均销售额', color='green')\n",
    "axes[1,0].set_ylabel('销售额')\n",
    "axes[1,0].set_xlabel('季度')\n",
    "axes[1,0].tick_params(axis='x', rotation=0)\n",
    "axes[1,0].grid(axis='y', alpha=0.3)\n",
    "\n",
    "# 工作日vs周末\n",
    "weekend_comparison['平均销售额'].plot(kind='bar', ax=axes[1,1], title='工作日vs周末销售额', color='red')\n",
    "axes[1,1].set_ylabel('销售额')\n",
    "axes[1,1].set_xlabel('类型')\n",
    "axes[1,1].tick_params(axis='x', rotation=0)\n",
    "axes[1,1].grid(axis='y', alpha=0.3)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 8.4 创建机器学习时间特征\n",
    "\n",
    "**特征工程的重要性：**\n",
    "\n",
    "在机器学习中，时间特征的质量直接影响模型性能。我们需要将日期时间转换为模型可以理解的特征。\n",
    "\n",
    "**特征类型：**\n",
    "\n",
    "1. **基本时间特征**：直接提取的年、月、日、星期、季度等\n",
    "2. **周期性特征**：使用正弦余弦编码，将周期性时间转换为连续数值\n",
    "   - 月份：`sin(2π * month / 12)` 和 `cos(2π * month / 12)`\n",
    "   - 星期：`sin(2π * weekday / 7)` 和 `cos(2π * weekday / 7)`\n",
    "   - 优点：保留了周期性的连续性，避免月份12和月份1之间的跳跃\n",
    "3. **布尔特征**：是否为周末、月初、月末等\n",
    "4. **时间距离特征**：距离起始日期的天数、一年中的第几天等\n",
    "\n",
    "**周期性编码的优势：**\n",
    "- 将离散的时间值转换为连续的特征\n",
    "- 保持时间的周期性（12月之后是1月）\n",
    "- 提高模型对时间模式的学习能力\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "机器学习时间特征示例（前5行）:\n",
      "        date        sales  year  month  day  weekday  quarter  month_sin  \\\n",
      "0 2023-01-01  1349.671415  2023      1    1        6        1        0.5   \n",
      "1 2023-01-02   989.616241  2023      1    2        0        1        0.5   \n",
      "2 2023-01-03  1071.653176  2023      1    3        1        1        0.5   \n",
      "3 2023-01-04  1162.626919  2023      1    4        2        1        0.5   \n",
      "4 2023-01-05   990.345148  2023      1    5        3        1        0.5   \n",
      "\n",
      "   month_cos  weekday_sin  ...  dayofyear_cos  is_weekend  is_month_start  \\\n",
      "0   0.866025    -0.781831  ...       0.999852        True            True   \n",
      "1   0.866025     0.000000  ...       0.999408       False           False   \n",
      "2   0.866025     0.781831  ...       0.998669       False           False   \n",
      "3   0.866025     0.974928  ...       0.997634       False           False   \n",
      "4   0.866025     0.433884  ...       0.996303       False           False   \n",
      "\n",
      "   is_month_end  is_quarter_start  is_quarter_end  is_year_start  is_year_end  \\\n",
      "0         False              True           False           True        False   \n",
      "1         False             False           False          False        False   \n",
      "2         False             False           False          False        False   \n",
      "3         False             False           False          False        False   \n",
      "4         False             False           False          False        False   \n",
      "\n",
      "   days_from_start  dayofyear  \n",
      "0                0          1  \n",
      "1                1          2  \n",
      "2                2          3  \n",
      "3                3          4  \n",
      "4                4          5  \n",
      "\n",
      "[5 rows x 22 columns]\n",
      "\n",
      "特征数量: 22\n",
      "\n",
      "特征列表:\n",
      " 1. date\n",
      " 2. sales\n",
      " 3. year\n",
      " 4. month\n",
      " 5. day\n",
      " 6. weekday\n",
      " 7. quarter\n",
      " 8. month_sin\n",
      " 9. month_cos\n",
      "10. weekday_sin\n",
      "11. weekday_cos\n",
      "12. dayofyear_sin\n",
      "13. dayofyear_cos\n",
      "14. is_weekend\n",
      "15. is_month_start\n",
      "16. is_month_end\n",
      "17. is_quarter_start\n",
      "18. is_quarter_end\n",
      "19. is_year_start\n",
      "20. is_year_end\n",
      "21. days_from_start\n",
      "22. dayofyear\n",
      "\n",
      "============================================================\n",
      "周期性特征示例（月份的正弦余弦编码）:\n",
      "============================================================\n",
      "     month     month_sin     month_cos\n",
      "0        1  5.000000e-01  8.660254e-01\n",
      "31       2  8.660254e-01  5.000000e-01\n",
      "59       3  1.000000e+00  6.123234e-17\n",
      "90       4  8.660254e-01 -5.000000e-01\n",
      "120      5  5.000000e-01 -8.660254e-01\n",
      "151      6  1.224647e-16 -1.000000e+00\n",
      "181      7 -5.000000e-01 -8.660254e-01\n",
      "212      8 -8.660254e-01 -5.000000e-01\n",
      "243      9 -1.000000e+00 -1.836970e-16\n",
      "273     10 -8.660254e-01  5.000000e-01\n",
      "304     11 -5.000000e-01  8.660254e-01\n",
      "334     12 -2.449294e-16  1.000000e+00\n"
     ]
    }
   ],
   "source": [
    "# 创建时间特征用于机器学习\n",
    "def create_time_features(df, date_col):\n",
    "    \"\"\"\n",
    "    从日期列创建时间特征\n",
    "    \n",
    "    参数:\n",
    "        df: DataFrame\n",
    "        date_col: 日期列的名称\n",
    "    \n",
    "    返回:\n",
    "        包含时间特征的DataFrame\n",
    "    \"\"\"\n",
    "    df = df.copy()\n",
    "    \n",
    "    # 基本时间特征\n",
    "    df['year'] = df[date_col].dt.year\n",
    "    df['month'] = df[date_col].dt.month\n",
    "    df['day'] = df[date_col].dt.day\n",
    "    df['weekday'] = df[date_col].dt.weekday\n",
    "    df['quarter'] = df[date_col].dt.quarter\n",
    "    \n",
    "    # 周期性特征（正弦余弦编码）\n",
    "    df['month_sin'] = np.sin(2 * np.pi * df['month'] / 12)\n",
    "    df['month_cos'] = np.cos(2 * np.pi * df['month'] / 12)\n",
    "    df['weekday_sin'] = np.sin(2 * np.pi * df['weekday'] / 7)\n",
    "    df['weekday_cos'] = np.cos(2 * np.pi * df['weekday'] / 7)\n",
    "    df['dayofyear_sin'] = np.sin(2 * np.pi * df[date_col].dt.dayofyear / 365.25)\n",
    "    df['dayofyear_cos'] = np.cos(2 * np.pi * df[date_col].dt.dayofyear / 365.25)\n",
    "    \n",
    "    # 布尔特征\n",
    "    df['is_weekend'] = df['weekday'] >= 5\n",
    "    df['is_month_start'] = df[date_col].dt.is_month_start\n",
    "    df['is_month_end'] = df[date_col].dt.is_month_end\n",
    "    df['is_quarter_start'] = df[date_col].dt.is_quarter_start\n",
    "    df['is_quarter_end'] = df[date_col].dt.is_quarter_end\n",
    "    df['is_year_start'] = df[date_col].dt.is_year_start\n",
    "    df['is_year_end'] = df[date_col].dt.is_year_end\n",
    "    \n",
    "    # 时间距离特征\n",
    "    df['days_from_start'] = (df[date_col] - df[date_col].min()).dt.days\n",
    "    df['dayofyear'] = df[date_col].dt.dayofyear\n",
    "    \n",
    "    return df\n",
    "\n",
    "# 应用特征工程\n",
    "ml_features = create_time_features(sales_df[['date', 'sales']], 'date')\n",
    "\n",
    "print(\"机器学习时间特征示例（前5行）:\")\n",
    "print(ml_features.head())\n",
    "print(f\"\\n特征数量: {ml_features.shape[1]}\")\n",
    "print(f\"\\n特征列表:\")\n",
    "for i, col in enumerate(ml_features.columns, 1):\n",
    "    print(f\"{i:2d}. {col}\")\n",
    "\n",
    "# 显示周期性特征的示例\n",
    "print(\"\\n\" + \"=\"*60)\n",
    "print(\"周期性特征示例（月份的正弦余弦编码）:\")\n",
    "print(\"=\"*60)\n",
    "cyclic_example = ml_features[['month', 'month_sin', 'month_cos']].drop_duplicates('month').sort_values('month')\n",
    "print(cyclic_example)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9. 总结\n",
    "\n",
    "### 9.1 关键要点\n",
    "\n",
    "1. **`.dt` 访问器只能用于 datetime 类型的 Series**\n",
    "   - 使用前需要确保数据类型正确\n",
    "   - 字符串格式需要用 `pd.to_datetime()` 转换\n",
    "\n",
    "2. **基本属性提取**\n",
    "   - 年、月、日、时、分、秒等基本组件\n",
    "   - 返回整数类型的 Series\n",
    "\n",
    "3. **扩展属性**\n",
    "   - 星期、季度、一年中的第几天等\n",
    "   - 可以用于数据分组和分析\n",
    "\n",
    "4. **日期名称和格式化**\n",
    "   - 使用 `.dt.day_name()` 和 `.dt.month_name()` 获取名称\n",
    "   - 使用 `.dt.strftime()` 自定义格式\n",
    "\n",
    "5. **特殊日期判断**\n",
    "   - 月初、月末、季度初、季度末等\n",
    "   - 闰年判断\n",
    "\n",
    "6. **实际应用**\n",
    "   - 时间序列分析\n",
    "   - 数据分组和聚合\n",
    "   - 机器学习特征工程\n",
    "\n",
    "### 9.2 常用属性速查表\n",
    "\n",
    "| 类别 | 属性/方法 | 说明 |\n",
    "|------|----------|------|\n",
    "| 基本组件 | `.dt.year`, `.dt.month`, `.dt.day` | 年、月、日 |\n",
    "| 时间组件 | `.dt.hour`, `.dt.minute`, `.dt.second` | 时、分、秒 |\n",
    "| 星期 | `.dt.weekday`, `.dt.day_name()` | 星期几、星期名称 |\n",
    "| 周期 | `.dt.quarter`, `.dt.dayofyear` | 季度、一年中的第几天 |\n",
    "| 名称 | `.dt.month_name()` | 月份名称 |\n",
    "| 格式化 | `.dt.strftime(format)` | 自定义格式 |\n",
    "| 特殊日期 | `.dt.is_month_start`, `.dt.is_month_end` | 月初、月末 |\n",
    "| 特殊日期 | `.dt.is_quarter_start`, `.dt.is_quarter_end` | 季度初、季度末 |\n",
    "| 特殊日期 | `.dt.is_year_start`, `.dt.is_year_end` | 年初、年末 |\n",
    "| 闰年 | `.dt.is_leap_year` | 是否为闰年 |\n",
    "\n",
    "### 9.3 最佳实践\n",
    "\n",
    "1. **数据验证**：使用 `.dt` 访问器前先检查数据类型\n",
    "2. **特征工程**：对于机器学习，考虑使用周期性编码（正弦余弦）\n",
    "3. **性能优化**：批量提取多个属性时，考虑一次性创建 DataFrame\n",
    "4. **时区处理**：如果数据涉及时区，注意时区转换\n",
    "5. **缺失值处理**：datetime 类型的缺失值需要用 `pd.NaT` 表示\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 日期时间属性提取\n",
    "\n",
    "本教程介绍如何使用.dt访问器提取日期时间的各种属性，如年、月、日、时、分、秒等。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 导入必要的库\n",
    "\n",
    "在开始之前，我们需要导入以下库：\n",
    "- `pandas`: 用于数据处理和日期时间操作\n",
    "- `numpy`: 用于数值计算\n",
    "- `matplotlib.pyplot`: 用于数据可视化\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. .dt访问器基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用.dt访问器的前提条件\n",
    "\n",
    "**关键点：**\n",
    "- `.dt` 访问器只能用于 `datetime64` 类型的 Series\n",
    "- 在使用 `.dt` 访问器之前，需要确保 Series 的数据类型是 datetime 类型\n",
    "- 可以使用 `pd.api.types.is_datetime64_any_dtype()` 来检查数据类型\n",
    "\n",
    "**常见场景：**\n",
    "- 如果数据是字符串格式，需要先用 `pd.to_datetime()` 转换\n",
    "- 如果数据已经是 datetime 类型，可以直接使用 `.dt` 访问器\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期时间Series:\n",
      "0   2023-01-01\n",
      "1   2023-01-02\n",
      "2   2023-01-03\n",
      "3   2023-01-04\n",
      "4   2023-01-05\n",
      "5   2023-01-06\n",
      "6   2023-01-07\n",
      "7   2023-01-08\n",
      "8   2023-01-09\n",
      "9   2023-01-10\n",
      "dtype: datetime64[ns]\n",
      "\n",
      "数据类型: datetime64[ns]\n",
      "是否为datetime类型: True\n"
     ]
    }
   ],
   "source": [
    "# 创建日期时间Series\n",
    "dates = pd.date_range('2023-01-01', periods=10, freq='D')\n",
    "dt_series = pd.Series(dates)\n",
    "\n",
    "print(\"日期时间Series:\")\n",
    "print(dt_series)\n",
    "print(f\"\\n数据类型: {dt_series.dtype}\")\n",
    "\n",
    "# 检查是否可以使用.dt访问器\n",
    "print(f\"是否为datetime类型: {pd.api.types.is_datetime64_any_dtype(dt_series)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 提取基本日期时间组件\n",
    "\n",
    "**常用属性：**\n",
    "- `.dt.year`: 提取年份（整数）\n",
    "- `.dt.month`: 提取月份（1-12）\n",
    "- `.dt.day`: 提取日期（1-31）\n",
    "- `.dt.hour`: 提取小时（0-23）\n",
    "- `.dt.minute`: 提取分钟（0-59）\n",
    "- `.dt.second`: 提取秒数（0-59）\n",
    "\n",
    "**注意事项：**\n",
    "- 这些属性返回的都是整数类型的 Series\n",
    "- 如果原始数据没有时间部分，`.dt.hour`、`.dt.minute`、`.dt.second` 会返回 0\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 基本日期组件提取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 提取扩展日期属性\n",
    "\n",
    "**更多有用的属性：**\n",
    "- `.dt.weekday` / `.dt.dayofweek`: 星期几（0=周一，6=周日）\n",
    "- `.dt.dayofyear`: 一年中的第几天（1-365/366）\n",
    "- `.dt.quarter`: 季度（1-4）\n",
    "- `.dt.isocalendar().week`: ISO 周数（1-53）\n",
    "- 可以通过 `.dt.weekday >= 5` 判断是否为周末\n",
    "\n",
    "**应用场景：**\n",
    "- 分析工作日和周末的差异\n",
    "- 按季度进行数据分组\n",
    "- 计算一年中的进度\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始日期时间:\n",
      "0   2023-06-15 14:30:45\n",
      "1   2023-06-15 15:30:45\n",
      "2   2023-06-15 16:30:45\n",
      "3   2023-06-15 17:30:45\n",
      "4   2023-06-15 18:30:45\n",
      "dtype: datetime64[ns]\n",
      "\n",
      "日期时间组件:\n",
      "             datetime  year  month  day  hour  minute  second\n",
      "0 2023-06-15 14:30:45  2023      6   15    14      30      45\n",
      "1 2023-06-15 15:30:45  2023      6   15    15      30      45\n",
      "2 2023-06-15 16:30:45  2023      6   15    16      30      45\n",
      "3 2023-06-15 17:30:45  2023      6   15    17      30      45\n",
      "4 2023-06-15 18:30:45  2023      6   15    18      30      45\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/9b/jb3nnnqn60x3dtlll6mcf0000000gp/T/ipykernel_62399/2019448435.py:2: FutureWarning: 'H' is deprecated and will be removed in a future version, please use 'h' instead.\n",
      "  datetime_series = pd.Series(pd.date_range('2023-06-15 14:30:45', periods=5, freq='H'))\n"
     ]
    }
   ],
   "source": [
    "# 创建包含时间的日期序列\n",
    "datetime_series = pd.Series(pd.date_range('2023-06-15 14:30:45', periods=5, freq='H'))\n",
    "\n",
    "print(\"原始日期时间:\")\n",
    "print(datetime_series)\n",
    "\n",
    "# 提取基本组件\n",
    "components = pd.DataFrame({\n",
    "    'datetime': datetime_series,\n",
    "    'year': datetime_series.dt.year,\n",
    "    'month': datetime_series.dt.month,\n",
    "    'day': datetime_series.dt.day,\n",
    "    'hour': datetime_series.dt.hour,\n",
    "    'minute': datetime_series.dt.minute,\n",
    "    'second': datetime_series.dt.second\n",
    "})\n",
    "\n",
    "print(\"\\n日期时间组件:\")\n",
    "print(components)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 获取日期名称和格式化\n",
    "\n",
    "**常用方法：**\n",
    "- `.dt.day_name()`: 获取星期名称（Monday, Tuesday...）\n",
    "- `.dt.month_name()`: 获取月份名称（January, February...）\n",
    "- `.dt.strftime(format)`: 自定义格式化字符串\n",
    "\n",
    "**格式化字符串说明：**\n",
    "- `%Y`: 四位年份\n",
    "- `%m`: 月份（01-12）\n",
    "- `%d`: 日期（01-31）\n",
    "- `%A`: 完整星期名称\n",
    "- `%b`: 月份缩写（Jan, Feb...）\n",
    "\n",
    "**本地化支持：**\n",
    "- 可以传入 `locale` 参数获取不同语言的名称，如 `locale='zh_CN'` 获取中文名称\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "扩展日期属性:\n",
      "             datetime  weekday  dayofweek  dayofyear  quarter  week  \\\n",
      "0 2023-06-15 14:30:45        3          3        166        2    24   \n",
      "1 2023-06-15 15:30:45        3          3        166        2    24   \n",
      "2 2023-06-15 16:30:45        3          3        166        2    24   \n",
      "3 2023-06-15 17:30:45        3          3        166        2    24   \n",
      "4 2023-06-15 18:30:45        3          3        166        2    24   \n",
      "\n",
      "   is_weekend  \n",
      "0       False  \n",
      "1       False  \n",
      "2       False  \n",
      "3       False  \n",
      "4       False  \n"
     ]
    }
   ],
   "source": [
    "# 更多日期属性\n",
    "extended_attrs = pd.DataFrame({\n",
    "    'datetime': datetime_series,\n",
    "    'weekday': datetime_series.dt.weekday,      # 0=Monday, 6=Sunday\n",
    "    'dayofweek': datetime_series.dt.dayofweek,  # 同weekday\n",
    "    'dayofyear': datetime_series.dt.dayofyear,  # 一年中的第几天\n",
    "    'quarter': datetime_series.dt.quarter,      # 季度\n",
    "    'week': datetime_series.dt.isocalendar().week,  # ISO周数\n",
    "    'is_weekend': datetime_series.dt.weekday >= 5\n",
    "})\n",
    "\n",
    "print(\"扩展日期属性:\")\n",
    "print(extended_attrs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 月份和季度相关属性\n",
    "\n",
    "**特殊属性：**\n",
    "- `.dt.is_quarter_start`: 是否为季度开始\n",
    "- `.dt.is_year_start`: 是否为年度开始\n",
    "- `.dt.quarter`: 所属季度\n",
    "\n",
    "**应用场景：**\n",
    "- 识别季度和年度边界\n",
    "- 进行季度级别的数据分析\n",
    "- 生成季度报告\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 日期名称和格式化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 判断特殊日期\n",
    "\n",
    "**布尔属性：**\n",
    "- `.dt.is_month_start`: 是否为月初\n",
    "- `.dt.is_month_end`: 是否为月末\n",
    "- `.dt.is_quarter_start`: 是否为季度初\n",
    "- `.dt.is_quarter_end`: 是否为季度末\n",
    "- `.dt.is_year_start`: 是否为年初\n",
    "- `.dt.is_year_end`: 是否为年末\n",
    "\n",
    "**应用场景：**\n",
    "- 识别月末、季末、年末等关键时间点\n",
    "- 在财务分析中识别报表日期\n",
    "- 在数据分析中识别时间周期边界\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期名称和格式化:\n",
      "        date   day_name month_name day_name_zh               strftime\n",
      "0 2023-06-12     Monday       June         星期一     2023年06月12日 Monday\n",
      "1 2023-06-13    Tuesday       June         星期二    2023年06月13日 Tuesday\n",
      "2 2023-06-14  Wednesday       June         星期三  2023年06月14日 Wednesday\n",
      "3 2023-06-15   Thursday       June         星期四   2023年06月15日 Thursday\n",
      "4 2023-06-16     Friday       June         星期五     2023年06月16日 Friday\n",
      "5 2023-06-17   Saturday       June         星期六   2023年06月17日 Saturday\n",
      "6 2023-06-18     Sunday       June         星期日     2023年06月18日 Sunday\n"
     ]
    }
   ],
   "source": [
    "# 创建一周的日期\n",
    "week_dates = pd.Series(pd.date_range('2023-06-12', periods=7, freq='D'))  # 从周一开始\n",
    "\n",
    "date_names = pd.DataFrame({\n",
    "    'date': week_dates,\n",
    "    'day_name': week_dates.dt.day_name(),        # 星期名称\n",
    "    'month_name': week_dates.dt.month_name(),    # 月份名称\n",
    "    'day_name_zh': week_dates.dt.day_name(locale='zh_CN'),  # 中文星期\n",
    "    'strftime': week_dates.dt.strftime('%Y年%m月%d日 %A')  # 自定义格式\n",
    "})\n",
    "\n",
    "print(\"日期名称和格式化:\")\n",
    "print(date_names)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 判断闰年\n",
    "\n",
    "**闰年判断：**\n",
    "- `.dt.is_leap_year`: 判断是否为闰年（返回布尔值）\n",
    "\n",
    "**闰年规则：**\n",
    "- 能被4整除但不能被100整除的年份\n",
    "- 能被400整除的年份\n",
    "\n",
    "**应用场景：**\n",
    "- 计算年度天数（365或366）\n",
    "- 处理跨年数据时需要考虑闰年\n",
    "- 日期计算和验证\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "月份信息:\n",
      "         date  month_num month_name_en month_abbr  quarter  quarter_start  \\\n",
      "0  2023-01-01          1       January        Jan        1           True   \n",
      "1  2023-02-01          2      February        Feb        1          False   \n",
      "2  2023-03-01          3         March        Mar        1          False   \n",
      "3  2023-04-01          4         April        Apr        2           True   \n",
      "4  2023-05-01          5           May        May        2          False   \n",
      "5  2023-06-01          6          June        Jun        2          False   \n",
      "6  2023-07-01          7          July        Jul        3           True   \n",
      "7  2023-08-01          8        August        Aug        3          False   \n",
      "8  2023-09-01          9     September        Sep        3          False   \n",
      "9  2023-10-01         10       October        Oct        4           True   \n",
      "10 2023-11-01         11      November        Nov        4          False   \n",
      "11 2023-12-01         12      December        Dec        4          False   \n",
      "\n",
      "    year_start  \n",
      "0         True  \n",
      "1        False  \n",
      "2        False  \n",
      "3        False  \n",
      "4        False  \n",
      "5        False  \n",
      "6        False  \n",
      "7        False  \n",
      "8        False  \n",
      "9        False  \n",
      "10       False  \n",
      "11       False  \n"
     ]
    }
   ],
   "source": [
    "# 不同语言的月份名称\n",
    "monthly_dates = pd.Series(pd.date_range('2023-01-01', periods=12, freq='MS'))  # 每月第一天\n",
    "\n",
    "month_info = pd.DataFrame({\n",
    "    'date': monthly_dates,\n",
    "    'month_num': monthly_dates.dt.month,\n",
    "    'month_name_en': monthly_dates.dt.month_name(),\n",
    "    'month_abbr': monthly_dates.dt.strftime('%b'),  # 月份缩写\n",
    "    'quarter': monthly_dates.dt.quarter,\n",
    "    'quarter_start': monthly_dates.dt.is_quarter_start,\n",
    "    'year_start': monthly_dates.dt.is_year_start\n",
    "})\n",
    "\n",
    "print(\"月份信息:\")\n",
    "print(month_info)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 提取时间周期属性\n",
    "\n",
    "**时间周期属性：**\n",
    "- `.dt.dayofyear`: 一年中的第几天\n",
    "- `.dt.isocalendar().week`: ISO 周数\n",
    "- `.dt.quarter`: 季度\n",
    "- `.dt.month`: 月份\n",
    "- `.dt.weekday`: 星期几\n",
    "\n",
    "**应用场景：**\n",
    "- 按不同时间周期进行数据统计\n",
    "- 分析时间分布模式\n",
    "- 进行时间序列分析\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 特殊日期判断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 实际应用：电商销售数据分析\n",
    "\n",
    "**场景说明：**\n",
    "模拟一个电商平台的销售数据，包含：\n",
    "- 季节性效应：使用正弦函数模拟季节性波动\n",
    "- 周末效应：周末销售额更高\n",
    "- 特殊月份效应：11月（双11）和12月（圣诞）销售额显著提升\n",
    "- 随机噪声：模拟真实数据的不确定性\n",
    "\n",
    "**数据准备：**\n",
    "使用 `.dt` 访问器提取各种日期属性，为后续分析做准备。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "特殊日期判断:\n",
      "        date  is_month_start  is_month_end  is_quarter_start  is_quarter_end  \\\n",
      "0 2023-01-01            True         False              True           False   \n",
      "1 2023-03-31           False          True             False            True   \n",
      "2 2023-04-01            True         False              True           False   \n",
      "3 2023-06-30           False          True             False            True   \n",
      "4 2023-07-01            True         False              True           False   \n",
      "5 2023-12-31           False          True             False            True   \n",
      "\n",
      "   is_year_start  is_year_end  \n",
      "0           True        False  \n",
      "1          False        False  \n",
      "2          False        False  \n",
      "3          False        False  \n",
      "4          False        False  \n",
      "5          False         True  \n"
     ]
    }
   ],
   "source": [
    "# 创建包含各种特殊日期的序列\n",
    "special_dates = pd.Series([\n",
    "    '2023-01-01',  # 年初\n",
    "    '2023-03-31',  # 季度末\n",
    "    '2023-04-01',  # 季度初\n",
    "    '2023-06-30',  # 月末\n",
    "    '2023-07-01',  # 月初\n",
    "    '2023-12-31'   # 年末\n",
    "])\n",
    "\n",
    "special_dates = pd.to_datetime(special_dates)\n",
    "\n",
    "special_checks = pd.DataFrame({\n",
    "    'date': special_dates,\n",
    "    'is_month_start': special_dates.dt.is_month_start,\n",
    "    'is_month_end': special_dates.dt.is_month_end,\n",
    "    'is_quarter_start': special_dates.dt.is_quarter_start,\n",
    "    'is_quarter_end': special_dates.dt.is_quarter_end,\n",
    "    'is_year_start': special_dates.dt.is_year_start,\n",
    "    'is_year_end': special_dates.dt.is_year_end\n",
    "})\n",
    "\n",
    "print(\"特殊日期判断:\")\n",
    "print(special_checks)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 按时间维度进行数据分析\n",
    "\n",
    "**分析方法：**\n",
    "- 使用 `groupby()` 按不同的时间属性分组\n",
    "- 计算各组的统计指标（平均值、总和、计数等）\n",
    "- 使用 `reindex()` 对结果进行排序，使其按时间顺序显示\n",
    "\n",
    "**分析维度：**\n",
    "1. **月度分析**：按月份统计平均销售额，识别销售旺季\n",
    "2. **星期分析**：按星期统计，识别工作日和周末的销售差异\n",
    "3. **季度分析**：按季度统计，了解季度销售趋势\n",
    "4. **工作日vs周末**：对比工作日和周末的销售表现\n",
    "\n",
    "**关键技巧：**\n",
    "- 使用 `reindex()` 确保时间顺序正确\n",
    "- 使用 `agg()` 同时计算多个统计指标\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "闰年信息:\n",
      "   year  is_leap_year  days_in_year\n",
      "0  2020          True           366\n",
      "1  2021         False           365\n",
      "2  2022         False           365\n",
      "3  2023         False           365\n",
      "4  2024          True           366\n",
      "5  2025         False           365\n"
     ]
    }
   ],
   "source": [
    "# 闰年判断\n",
    "years_to_check = pd.Series(pd.date_range('2020-01-01', '2025-01-01', freq='YS'))\n",
    "\n",
    "leap_year_info = pd.DataFrame({\n",
    "    'year': years_to_check.dt.year,\n",
    "    'is_leap_year': years_to_check.dt.is_leap_year,\n",
    "    'days_in_year': years_to_check.dt.is_leap_year.map({True: 366, False: 365})\n",
    "})\n",
    "\n",
    "print(\"\\n闰年信息:\")\n",
    "print(leap_year_info)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化时间模式\n",
    "\n",
    "**可视化目的：**\n",
    "通过图表直观展示不同时间维度的销售模式，帮助识别：\n",
    "- 月度销售趋势\n",
    "- 星期销售模式\n",
    "- 季度销售对比\n",
    "- 工作日与周末的差异\n",
    "\n",
    "**可视化技巧：**\n",
    "- 使用 `plt.subplots()` 创建多个子图\n",
    "- 使用 `plot(kind='bar')` 创建柱状图\n",
    "- 使用 `tick_params()` 调整标签角度\n",
    "- 使用 `tight_layout()` 优化布局\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 时间周期属性"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 创建机器学习时间特征\n",
    "\n",
    "**特征工程的重要性：**\n",
    "在机器学习中，时间特征的质量直接影响模型性能。我们需要将日期时间转换为模型可以理解的特征。\n",
    "\n",
    "**特征类型：**\n",
    "\n",
    "1. **基本时间特征**：直接提取的年、月、日、星期、季度等\n",
    "2. **周期性特征**：使用正弦余弦编码，将周期性时间转换为连续数值\n",
    "   - 月份：`sin(2π * month / 12)` 和 `cos(2π * month / 12)`\n",
    "   - 星期：`sin(2π * weekday / 7)` 和 `cos(2π * weekday / 7)`\n",
    "   - 优点：保留了周期性的连续性，避免月份12和月份1之间的跳跃\n",
    "3. **布尔特征**：是否为周末、月初、月末等\n",
    "4. **时间距离特征**：距离起始日期的天数、一年中的第几天等\n",
    "\n",
    "**周期性编码的优势：**\n",
    "- 将离散的时间值转换为连续的特征\n",
    "- 保持时间的周期性（12月之后是1月）\n",
    "- 提高模型对时间模式的学习能力\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "时间周期统计:\n",
      "总天数: 365\n",
      "季度分布: quarter\n",
      "1    90\n",
      "2    91\n",
      "3    92\n",
      "4    92\n",
      "Name: count, dtype: int64\n",
      "\n",
      "月份分布:\n",
      "month\n",
      "1     31\n",
      "2     28\n",
      "3     31\n",
      "4     30\n",
      "5     31\n",
      "6     30\n",
      "7     31\n",
      "8     31\n",
      "9     30\n",
      "10    31\n",
      "11    30\n",
      "12    31\n",
      "Name: count, dtype: int64\n",
      "\n",
      "星期分布:\n",
      "weekday\n",
      "0    52\n",
      "1    52\n",
      "2    52\n",
      "3    52\n",
      "4    52\n",
      "5    52\n",
      "6    53\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 创建一年的日期数据\n",
    "year_dates = pd.Series(pd.date_range('2023-01-01', '2023-12-31', freq='D'))\n",
    "\n",
    "# 提取时间周期属性\n",
    "time_periods = pd.DataFrame({\n",
    "    'date': year_dates,\n",
    "    'dayofyear': year_dates.dt.dayofyear,\n",
    "    'weekofyear': year_dates.dt.isocalendar().week,\n",
    "    'quarter': year_dates.dt.quarter,\n",
    "    'month': year_dates.dt.month,\n",
    "    'weekday': year_dates.dt.weekday\n",
    "})\n",
    "\n",
    "print(\"时间周期统计:\")\n",
    "print(f\"总天数: {len(time_periods)}\")\n",
    "print(f\"季度分布: {time_periods['quarter'].value_counts().sort_index()}\")\n",
    "print(f\"\\n月份分布:\")\n",
    "print(time_periods['month'].value_counts().sort_index())\n",
    "print(f\"\\n星期分布:\")\n",
    "print(time_periods['weekday'].value_counts().sort_index())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 实际应用示例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "销售数据示例:\n",
      "        date        sales  year  month  quarter  weekday  is_weekend  \\\n",
      "0 2023-01-01  1349.671415  2023      1        1        6        True   \n",
      "1 2023-01-02   989.616241  2023      1        1        0       False   \n",
      "2 2023-01-03  1071.653176  2023      1        1        1       False   \n",
      "3 2023-01-04  1162.626919  2023      1        1        2       False   \n",
      "4 2023-01-05   990.345148  2023      1        1        3       False   \n",
      "5 2023-01-06   993.779264  2023      1        1        4       False   \n",
      "6 2023-01-07  1478.541621  2023      1        1        5        True   \n",
      "7 2023-01-08  1400.785082  2023      1        1        6        True   \n",
      "8 2023-01-09   980.508316  2023      1        1        0       False   \n",
      "9 2023-01-10  1085.117768  2023      1        1        1       False   \n",
      "\n",
      "  month_name   day_name  \n",
      "0    January     Sunday  \n",
      "1    January     Monday  \n",
      "2    January    Tuesday  \n",
      "3    January  Wednesday  \n",
      "4    January   Thursday  \n",
      "5    January     Friday  \n",
      "6    January   Saturday  \n",
      "7    January     Sunday  \n",
      "8    January     Monday  \n",
      "9    January    Tuesday  \n"
     ]
    }
   ],
   "source": [
    "# 模拟电商销售数据分析\n",
    "np.random.seed(42)\n",
    "dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')\n",
    "\n",
    "# 模拟销售数据（考虑季节性和周末效应）\n",
    "base_sales = 1000\n",
    "seasonal_effect = 200 * np.sin(2 * np.pi * np.arange(len(dates)) / 365) + 300 * (np.arange(len(dates)) > 330)  # 年末促销\n",
    "weekend_effect = np.where(pd.Series(dates).dt.weekday >= 5, 300, 0)\n",
    "monthly_effect = pd.Series(dates).dt.month.map({11: 500, 12: 800}).fillna(0)  # 双11和圣诞\n",
    "noise = np.random.normal(0, 100, len(dates))\n",
    "\n",
    "sales = base_sales + seasonal_effect + weekend_effect + monthly_effect + noise\n",
    "\n",
    "sales_df = pd.DataFrame({\n",
    "    'date': dates,\n",
    "    'sales': sales\n",
    "})\n",
    "\n",
    "# 提取日期属性进行分析\n",
    "sales_df['year'] = sales_df['date'].dt.year\n",
    "sales_df['month'] = sales_df['date'].dt.month\n",
    "sales_df['quarter'] = sales_df['date'].dt.quarter\n",
    "sales_df['weekday'] = sales_df['date'].dt.weekday\n",
    "sales_df['is_weekend'] = sales_df['date'].dt.weekday >= 5\n",
    "sales_df['month_name'] = sales_df['date'].dt.month_name()\n",
    "sales_df['day_name'] = sales_df['date'].dt.day_name()\n",
    "\n",
    "print(\"销售数据示例:\")\n",
    "print(sales_df.head(10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "按月份分析平均销售额:\n",
      "month_name\n",
      "January      1117.42\n",
      "February     1208.72\n",
      "March        1270.80\n",
      "April        1290.64\n",
      "May          1213.23\n",
      "June         1166.19\n",
      "July         1061.09\n",
      "August        938.25\n",
      "September     890.79\n",
      "October       901.88\n",
      "November     1491.31\n",
      "December     2137.70\n",
      "Name: sales, dtype: float64\n",
      "\n",
      "按星期分析平均销售额:\n",
      "day_name\n",
      "Monday       1138.40\n",
      "Tuesday      1113.68\n",
      "Wednesday    1144.72\n",
      "Thursday     1132.13\n",
      "Friday       1147.37\n",
      "Saturday     1454.69\n",
      "Sunday       1434.95\n",
      "Name: sales, dtype: float64\n",
      "\n",
      "按季度分析:\n",
      "            mean        sum  count\n",
      "quarter                           \n",
      "1        1198.65  107878.80     90\n",
      "2        1223.24  111314.82     91\n",
      "3         964.17   88703.30     92\n",
      "4        1510.50  138966.13     92\n",
      "\n",
      "工作日vs周末对比:\n",
      "        mean     std\n",
      "工作日  1135.26  334.75\n",
      "周末   1444.72  346.45\n"
     ]
    }
   ],
   "source": [
    "# 按不同时间维度分析销售\n",
    "print(\"按月份分析平均销售额:\")\n",
    "monthly_sales = sales_df.groupby('month_name')['sales'].mean().reindex([\n",
    "    'January', 'February', 'March', 'April', 'May', 'June',\n",
    "    'July', 'August', 'September', 'October', 'November', 'December'\n",
    "])\n",
    "print(monthly_sales.round(2))\n",
    "\n",
    "print(\"\\n按星期分析平均销售额:\")\n",
    "weekday_sales = sales_df.groupby('day_name')['sales'].mean().reindex([\n",
    "    'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'\n",
    "])\n",
    "print(weekday_sales.round(2))\n",
    "\n",
    "print(\"\\n按季度分析:\")\n",
    "quarterly_stats = sales_df.groupby('quarter')['sales'].agg(['mean', 'sum', 'count']).round(2)\n",
    "print(quarterly_stats)\n",
    "\n",
    "print(\"\\n工作日vs周末对比:\")\n",
    "weekend_comparison = sales_df.groupby('is_weekend')['sales'].agg(['mean', 'std']).round(2)\n",
    "weekend_comparison.index = ['工作日', '周末']\n",
    "print(weekend_comparison)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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rdjYWP36669WsztiYmKsyipVqqSqVata6suVK6cffvhBTZo00SuvvKKIiIh8z//7779rxowZWrp0ab66P/74Q5cuXVJ2drbi4uIUGxurtLQ0rVu3TitXrlSXLl2s9l+1alW+NRHff/99OTo6WgXu5cuXl7u7uz7//HM1bdpUb731lipXrqylS5fK39/f6vgFCxZozJgxcnJy0oQJEzRp0iRLXXZ2ti5duqSHHnoo3zF5L0ycnJy0ePFinTlzRjNmzFC3bt3k6uqq559/Xvfff798fHwsH5U9deqUvv/+e0nSQw89JG9v73zXBAAAALeGvzMTvW7duvmWH7yy7uTJk5ZgWro84eS2226z2u+dd97Ro48+agnQpcvj56ZNm2rRokW6++67JUmtWrXSmjVr1KlTJ8t+ubm5GjhwoH744QdJl9c/v3JGfN5s8h9//NHqnIcOHbLsN3PmTMtEHEmqV6+eWrZsqW7duqlt27aSZFnWsUGDBpKkxMRES7AuXX4NMGbMmAKvgyS98sorKlOmjKZOnWpV/teJMABgb4ToAGAHV94cqLDeffddS7ArqcDZMHll/fr1yxeU33bbbVqwYIFatGih/v37q06dOpa65ORkBQQEqEOHDnrqqafyPe+QIUN08uRJJScna+bMmVqwYIHS0tLk7++fL0DP4+TkZPn/vn379MEHHygzM1N+fn5ycHCQo6Ojhg8frsjISEVGRlr2vfIjqJs2bZK/v78uXLigjz/+WG+//bY+/fRTvfTSS+revbtlv6VLl2r69OnaunWrVRu8vLws/3dwcNDtt9+uvn376tKlS2revLmky2845K0puXz5crm4uOjIkSPq1KmT7rvvvgL7BgAAABTG1q1bbc5iv3TpklXd888/b/n//Pnz9d///ldOTk6qV6+eHB0d5eDgoOXLl+cbr99zzz2W/xtjJF0ef//www/65JNPNHDgQH377beqWbOmZb+hQ4fKyclJYWFhVs9VuXJly//HjBmjMWPGKCwsTO+8845SU1Mt9wyqWbNmvvXUN2/eLDc3Nz333HOWsmrVqqlatWo2r4+vr6927NiR71O6AFDcEKIDgB388ssvatKkiVXZ1q1b1aJFC5vHfPzxx6pTp46++eYb9erVS2lpaZa6iIgITZgwId9NSf+qWbNm6tSpkyZPnmz5WKkxRk8//bRycnI0b968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FBOM0QEAAICb65oh+smTJzVmzBg9//zzatmypR588EFt2bKlwH0dHBzk5+enihUr3vCGAgAAALiMMToAAABQdK4ZolesWFH33XefunXrphYtWmjWrFny9/dXo0aNtGvXLjVs2NDyb3JyssqVK6fo6OiiaDsAoASrNWptkZ7vyKTORXo+ALiZGKMDAAAARcfxWju4ubnp9ddf165du+Tk5KS0tDQ5ODho+/btMsZY/o2KilJUVJRiY2OLot0AAADALYsxOgAAAFB0rjkT/V//+pccHBwkScYYde3a1VLn4OBgqZMkJycnTZky5SY0EwAAAEAexugAAABA0blmiD5t2jTL//fu3au6deuqffv2VgPzPBUqVNCIESNuaAMBAAAAWGOMDgAAABSda4boLVu2VExMjF566SXFxMRo+fLlMsYoPDzc8q8ky7+S9Morr9y8FgMAAAC3OMboAAAAQNG5Zoh+6tQptWjRQiNGjNCPP/6ocuXK6fnnn9eePXus/t29e7eMMQXOfgEAAABw4zBGBwAAAIrONUP0atWqad++fapRo4beeOMNnThxQmfPntWaNWt01113aevWrbrrrrvUvHlzNW3alPUWAQAAgJuMMToAAABQdBwLs5O3t7eMMZKkzMxM7du3T8eOHVN2drZOnDihY8eOaejQofr44491/Pjx62rAuXPnVLt2bf3000+WsqioKDVp0kSurq6qVauW5syZY3XMggULVLt2bbm6uqphw4aKjIy01OXk5GjEiBHy8vKSu7u7nnzySZ08efK62gQAAAAUdzdzjA4AAADg/1wzRO/Vq5d69OghBwcHSxh97NgxNWjQQPHx8erQoYMaNGig/v37Kzc3V19//XWhTx4ZGammTZvq8OHDlrLz58+rY8eOCgwMVHJyshYuXKhhw4Zpw4YNkqTNmzdr0KBBioiIUGpqqvr06aPOnTsrISFBkjRx4kStXbtWUVFRio+Pl4eHh7p3735dFwUAAAAozm7mGB0AAACAtWsu5zJ06FBFRUXpwoULuu++++Tt7a1atWrpwIEDqlGjhiIjI3XXXXdJkjIyMlSuXLlCnXj+/Pl6++239cEHH6hbt26W8uXLl8vT01PDhg2TJDVr1kyBgYGaN2+e2rRpo4iICAUFBal169aSpJCQEIWHh2vFihXq37+/5s6dq0mTJqlWrVqSpMmTJ6tG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Bw8eVGZmZon4gZKkmTNnWv7v4+OjdevWaerUqXrzzTct7+aXBDk5Oapbt66aNm2qadOm6eWXX9a3336r1157zRKkl+SlXf76/eTo6KhevXrpp59+0scffyyp5A9m8mbs5ubmqlGjRvriiy+0e/du9e/fXyNGjNChQ4fs3cTrVtANbp955hllZGTo7NmzkkrGH9+/48q/BRUrVlS/fv1UuXJl9e3bV+np6XJ0dCy1fw/y5H1CqX379qpcubKCg4NL5Nf7t99+08aNG/Xf//5Xc+fOlSRLEFsaXbl0TePGjTV27NhSszRCXt/mzZunf/3rX3rppZdKTd9gH7fquL84yPt7cuX4780331RcXJzef//9fHUoWlf+vX/ooYd08eJFHT16NF8dboy33npLrq6umjNnjr2bUuo4ODioTJkyeu211xQdHa1Tp07Zu0m3rIKWLho5cqScnZ21e/duq33wz/11DOPq6qpOnTrpww8/VFRUVIkYQxf/Ft7i8mbdJSQk6MKFC5IuhydNmzbV+++/rzNnzpSad4YLelHQpEkTffXVV9q3b1+J+IH63//+p3fffVdBQUH6z3/+o9atW+u///2vdu3aJU9PT3366aclIkjPzc2Vk5OTYmJi9Pzzz+vuu+/WE088obffftsqSP/2229L7M1GHR0ddfjwYXXt2lXR0dGKj4+Xt7e3xo0bp23btuncuXMlPtDKe6H3yiuv6P7779f333+vzz//XHfccYdOnz4tT09PO7ew8DIyMnT06FGVKVNG+/fv13/+8x/t2bNHktSxY0dlZGTozTfflKQS8bvieuXk5MjBwUHnzp3TyZMn9fjjj2vu3Ll69tlndfDgQYWEhFjeNCmt8n4eL126pHvvvVfr1q3Tr7/+KkdHx2J/k86//n2rV6+eIiIi9Mwzz+irr76yzEYviUuXFdbs2bP14osv6sCBA0pNTbV3c26o999/X/3791dmZqYkQk78M3m/6zMyMiSV3nF/cZS3hEVAQIB27typ8+fPq1y5cnr55Zf122+/6dKlS6X2d3RxlnfN834mJMnf318NGjTQa6+9pqysrFI59itKedc4PT1dFy9elCSVLVtWrVu3LpGfpi6OChob+Pj46Pfff7dMbOL3S9FzdHTUoUOHNHPmTO3bt0+SVL9+fWVmZioiIsKyD24MJycnHThwQJMnT1ZSUpKys7P15JNP6vnnn9eiRYuUkZFR7H8O+G4oxvJCk1OnTqlevXoKDAzUhAkTJEkhISFq3769IiIilJubW+y/0a4lL7T9/fffNWnSJB08eFCS1LlzZwUEBOi9995TWlqanVt5bffff79mzJiho0ePauzYsapXr54kqWrVqvroo49UoUIFffbZZ/r888/t3NKrc3R01KlTp/TFF1+odevW6tmzpwYMGKBHH31U48aN07fffquRI0fq8ccfV1JSUon6/ruyrUeOHNHhw4f17LPPasCAAfrxxx/l5+en3377TXFxcaUm0Dpy5Ijat28vSerdu7fS0tK0cOFC9ezZU99//72dW3dtubm5euONN9StWzcdPHhQkZGRGjdunLp3764333xTp0+fVnh4uC5duqQdO3bYu7k3XN7vx927d6tVq1Zq1qyZvv76a0lSjx491L9/f/3+++964YUX9Mwzz2jlypV2bvGNlfeiIy8or169uj799FN16dJFjz/+uA4dOiRnZ+diG1xeuaTSa6+9phdeeEGvvfaajh07po8//lhVqlRRRESEvvnmG0mlZ5bjX78eL730ksaPH6+ffvpJ3333XbH9ehXGX9v++uuva+DAgfrqq68UFRVFyIm/zRij1NRU+fr6KiAgoNSO+4ubK69nTEyMzp8/r06dOumVV17RN998ow4dOmjVqlWKjIwsNb+jSxIHBwedPn1avr6+euuttyxLG40aNUrlypVTTEyMJGaL/hMODg6Ki4tThw4d9OKLLyo6Olrly5fXgAEDtGzZMq1du9beTSzx8rKO119/XVu3bpUkPfbYY2rfvr1GjBihlJQUfr8UoSt/7y9YsECffPKJWrVqpQkTJujMmTOaM2eOfv31V5ZSu0HyrrcxRuvXr9dbb72lLl26aNiwYUpMTFTTpk21b98+yyTi4jzOIUQvpvJCk7179+rVV1/Ve++9pwceeECLFy+Wj4+Ppk+fLhcXF8XHx8vR0bHYf6NdTd7Nxg4dOqRFixZp3Lhx6tu3r3r27GmZcVm2bFlLiF4cB0h5L6jLly+vp59+WiNHjlSlSpW0ePFiyz5Vq1bVjBkzdOnSJa1cubJYz8S7cOGCHn74YX322Wfy9fWVdPkd2RdffFGPPvqoJkyYoGXLlmn8+PGaO3duifn+y3tjKiEhQQcOHFCrVq20a9cuTZkyRffee68CAgK0Zs0aHT9+XO+8844uXLhQ4gYzfw13MjIy5ODgoPPnz2vAgAGKjo7WL7/8oooVKyo5OVlVqlSxU0sLz9HRUc2bN9ddd92lV155RU899ZSio6P15ptv6quvvlLv3r01YsQInT9/XgcOHLB3c284R0dHHTx4UB06dNBrr72mPXv26I033tDOnTu1a9cu9e7dW6+88ooSEhJ05MgRderUyd5NvmGu/FsYFBSkf//73+rUqZMOHDigKVOmqG3btmrSpIkOHz5sCaqLm7x2NW7cWMeOHVOjRo3k6uqqZs2a6fTp03rzzTdVpUoVTZkyRWvWrLF3c2+IvHXCc3NztWHDBn366aeKj4/XmDFjNG7cOPXq1UvLly8vkUH6lWug79y5U2vWrFF2dramTZumnj17ql27dszaw3W7chkRd3d3rVixQg8++KAWLlxY6sb9xU3e2DAxMVGHDh3SE088oU2bNmnWrFmqWrWqevfurTlz5qhatWqaNWuW5ZPBuPmu/Jvu7OyswYMHa9WqVXrttdfUs2dPOTo66uzZs5ZPczFb9PpdeY2rV6+uDh06WO5LNmTIEB0+fFjjxo3Tjz/+qEuXLhXLcVZx99cJXIsXL9bw4cPVvn17xcTEqEuXLvL19dVvv/0mqXhmHaVN3u/9lJQU5eTkaNy4cdq5c6fee+89rVy5Ut27d9eQIUNUrVo1y+ROvi5/X971Tk1NVVpamgYOHKjz58/rqaeeUkxMjBo3bqyTJ09q48aNmjx5sqRiPqnIoNg6evSoeeWVV8ykSZOMMcZcunTJXLx40YwYMcI8//zzxt3d3Tg4OJg5c+bYuaV/X05OjjHGmGPHjplq1aqZ9evXm7Nnz5rPPvvMtGjRwvj6+pqXXnrJODk5mbFjx9q5tQXLysoyxlzuy8KFC820adPMzp07zYoVK8x9991nAgMDrfY/c+aMOX78uD2aelW5ublWj1etWmUqV65sBgwYYFW+d+9e07t3b9OvXz+bxxZH2dnZxhhj9uzZY+rXr29q1apl/P39rb4W27ZtM+PHjzePPfaYuf32280ff/xhjPm/79PiLu97MTc312zbts0cOnTIGGPMggULjIODg6lVq5bJzMw0xhjz0UcfmbvvvtucPHnSbu0tjLw+GWPM5s2bTceOHU2HDh3M77//bowx5vTp02bFihXmmWeeMY6OjqZmzZqWr1tpMn/+fNOrVy+TlZVloqOjTYMGDUy9evXMbbfdZj744ANjjDEpKSmWn8Urr1tJ9/vvv5vKlSubN9980+zcudM8/fTT5s477zS7d+82Z86cMQEBAcbBwaFYfy+Hh4ebxx9/3PK4d+/epnHjxubw4cPm5MmT5rfffjMDBgwwx44ds2Mrb4y878GcnBzTqFEj07FjR/Pggw+aVq1amddee80YY8zIkSNNhQoVzOeff15ifr8a839/C3JyckyTJk3M448/burWrWuaNm1qZs2aZVJSUsxzzz1nbr/9dhMZGWnn1qKkyBuf/PHHH2bs2LEmIiLCxMfHG2OMyczMNMOGDSs14/7i5sqx4QMPPGDq1q1rGjVqZBISEiz7/Pnnn2bo0KGmTZs2xt3d3cTFxRljSsbYtyTL+9ocO3bMLF++3MTExBhjjDlx4oRZv369ady4senSpYtp0qSJqVq1qqUehZd3jY8cOWKWLFlitmzZYqn74osvzMCBA82dd95pbr/9dvPAAw+Y06dPG2P43r8eedc4ISHBnDhxwhhjzIULF8ymTZvM448/bpo0aWI6depkqlSpYkaPHm3Ppt4y8r4m0dHR5uGHHzatWrUyAwcONImJicYYYw4fPmw2btxo2rVrZypUqGC8vb0tXztcvyuv92OPPWbq1atn3nrrLavfI+Hh4ebVV1813t7e5tFHHzVJSUn2am6hEKIXUxcvXjSdO3c2bm5uZv369ZayPImJiWbFihWmRYsWJjg42OTk5JTYP2gnT540TzzxhBk+fHi+uk8//dS8/fbbxsvLyzz44IPFLhy7Mizw8/MzTzzxhPH19TWRkZEmOzvbLF++3DRu3NgEBQXZuaVXl/fL7dy5c+bYsWPm4MGDxhhj1q9fb8qXL2+GDRtmtf/hw4dLZPCxd+9eU7lyZRMaGmp+/PFHU7lyZdOxY0fzxx9/WL6Wly5dMtnZ2aZly5bmxRdftGezr8tfw5369eubKlWqmNDQUJOWlmbCw8NNuXLlTFBQkHnmmWfMnXfeaXbt2mXnVhfOkSNHTHh4uMnJyTFbtmwxTzzxhGnfvr3Zu3ev1X6rVq0y3bt3N2vXrjXGlOxBft7XMy0tzRhzOUSvVq2aadmypalbt6559tlnzZ9//mn69euX7w3GktzvK+Xm5prc3Fzz6quvmsGDB1vKW7RoYV588UWzb98+k5SUZM6ePWtGjx5t+T1WHL322muWNx579uxpfH19zYULF8zw4cPNkCFDjDHWf+NLg549e1q9iVyvXj3TtWtXk56ebowxZvDgwaZq1aomJSXFXk3827p27Wp69OhheXzHHXeYPn36mIyMDGOMMU8//bS5++67S93XFDde3u/6PXv2mMqVK5tOnToZT09P079/f7Njxw7LfufOnSs14/7iIu/67du3z1SuXNlMnDjRrF271nh7e5tmzZpZ3sgwxpiMjAyTlZVlnnjiCdO7d297NfmWceXPRbVq1UyjRo2Mg4ODWbBggdXf+q+//tqMGzfOODk5Wd5cKkmvT+wp7zrt3r3bVKtWzTz44IPm3nvvNSNGjLDsk5qaag4fPmxeeuklU6dOHfPiiy/ye+c6XPkmXYMGDcy9995r+vbta6Kjoy37rF692rz//vumSpUq5q677jJbt261V3NvKTExMaZy5crm3XffNcOHDzd+fn6mZ8+eVm+gGmPMjz/+aIKCgsznn39ujCk9r7GKSt7vmbzrPXbsWDNu3Djj6Oho3nzzTcsbF8Zcfs0bFRVlvL29zfz58+3V5EIhRC9Grvyjn5OTYzZt2mTq1Klj2rVrZynPm0WaZ/v27aZq1armf//7X1E184bKzc0133zzjbn77ruNn5+fpTzvhWieHTt2mIYNG5rPPvusqJtYKH369DEBAQHGmP+bAXrx4kWzadMms3z5clOzZk2rmdvFSd4fgz179ph7773XNG3a1JQtW9aMGDHC/PHHH2bDhg3G1dXVMoPwSsV9oHpl+zIyMsxzzz1n3n33XWOMMYcOHTLBwcGmSpUqxt/f3/zxxx/m0qVLlv1Xrlxpnn766WIdzOW5sp+vvvqqCQoKMjk5OeaNN94wjRs3NuPHjzfGGLNx40bzySefmIiICMss9ZJg4sSJpkGDBub99983ubm5liC9Q4cO5rfffrPad8CAAfk+/VFSxcXFmaCgILNmzRqTm5trxo0bZz744APz1VdfWfYJCAgwr7/+uh1befP17dvXvPfee8YYY/z8/Czh5cMPP2wmT55stW9xmIFfUBvmzJljfH19TZcuXUzjxo2twtaPPvrIGFO6BuYpKSmmRYsW5ueffzbGXP4aPvjggyY+Pt688MILZt++fcYYY5nVVpLEx8ebhx9+2PJpmP79+5t//etf5sSJE+bFF1+0BG/MWsK15P3Mx8XFmZo1a5pp06YZY4wZO3asqVOnjunbt2++8X1JH/cXB1f+rr106ZLp3bu3eeutt4wxlwP1AQMGmBo1apgmTZqY06dPW/1O//LLL63eQMONl/f1+fPPP80dd9xhpk2bZi5cuGC6detmPDw8zPz58/O9QTl37lxz7733WgUysC3vdcOBAwfMnXfeaWbPnm2SkpJMnz59TL169Sxv7ufJzMw0y5YtM0899ZRlcgeuLu/7ODY21nh5eZmpU6eaWbNmWYL0vPFRnj179pinn37azJw50x7NvWVkZWWZjIwM06lTJzNlyhRjzOW/q+3btzeNGjUyvXv3zje5Y+DAgaZ///72aG6Jl5uba1JTU0379u0tr3f++OMP07lzZ+Pk5GRef/31fG9chIaGFvvrzcJhxUROTo4cHR114sQJbd26VXv27JG/v78WLFig3bt36+mnn5Z0+S7ZeTdXk6SHH35Y9913n86ePWunll+/vDVQ89ZG6tKli6ZNm6bz58+rd+/ekiQXFxdlZWVJuryOWOPGjRUYGKhly5YVizVUr/waSNLZs2cVFBQk6f/Wy9q4caNmzpyphx56SDNnztQbb7xR5O28ltzcXDk4OCg+Pl49e/bUyy+/rFWrVmnRokXatGmTPvjgAzVr1kxfffWVwsLC9Mknn1gdX5zXHkxPT1dISIjWr18v6fL31Pnz51WzZk1lZWUpKChI//rXv/Tjjz9q8+bNeu655/Tjjz9ajl++fLni4uJ06dIle3Wh0PK+DiNGjNDhw4c1adIkOTo6auLEifr3v/+tlStX6r333pOPj49efvll9evXT3fffbedW21b3s9+nldeeUVdunTR6tWrNWXKFDVv3lwjR46Ui4uLevXqpWPHjlnWG/Tw8FBOTk6+5yiJcnJydPz4cc2cOVObNm3S2LFjNXToUJUvX14zZsxQ165d9fvvv1tuPFcaFLTeYIUKFfTFF1+ocePGeuihh7Rw4UJJkpubmxo0aGC1r7Ozc5G082rybnK6atUqLVy4UH/++aceffRR1apVS/+PvfsOi+J63wZ+L6AoioqiogEL2EVEUUQCCtiwEBUbIooVjR01sfdeMcbeS+yF6NcSW6xYYmxI7FgQUYMiRUSkPO8fvDs/ViDRWJbF+3NdXLpnZuDM7O7MmWfOec65c+fw008/wdDQED///DPOnDmDpk2bAsjmuf/+xbvvm3pizbt376J79+74888/cf78eRQrVgxnzpxRvq/FihX74nX9UPJO3unU1FQkJiYiKioKPXr0wPnz55V5Jg4fPqy0UUqWLKmN6pIOePPmDe7evat8569cuQJra2sMGjQIz549w/379/Hdd99h//79CAgIQGBgoLKtLrb7s5OEhAQMHjxYmSguV65ciI6Oho2NDd6+fYvu3bujYsWK2LZtGy5cuIBvv/0WZ86cUbb/7bffEBISwrzon0FycrLGxIo7d+5Es2bNlO+FhYUFGjVqhN69e2Pnzp148OCBsq2LiwvMzc3x5s0bLdVeN6jbxur7hpMnT6Jt27bw8/PDmzdvEBcXB3t7exw8eBDjxo1Trme5c+dGnTp1cPXqVdy7d09r9dcFkm7yxMTERMyYMQMjR47EkCFD0KhRI5QtWxYnT57EokWLcPXqVWU7GxsbNGzYEBs2bEBiYqK2qp8jvX79Gv7+/gDS2uivX79GaGgo2rdvj8TERIwePRpNmzZFq1atsHHjRtjb2+Pp06fK9ur5SN6+fcu5SN5DQkICAgICcPPmTahUKuTLlw+vXr1CnTp1kJiYiJ49e8LHxwcLFy7ErFmzMGjQIFy6dAlA2vfm/PnziI2NzdY56LNvBOwrop447erVq6hTpw4GDRoEDw8PrF+/Ho6OjggMDMS5c+fg6ekJQDNIsHXrVoSGhsLKykpb1f8gKSkp0NfXx40bN9C9e3cMHjwY+/btw3fffYcFCxbg8uXL6NKlC4C0hq06yJucnIxbt25pufZpUlNTlSCJn58fYmJikJSUhE2bNgFIa2gAQM2aNXHz5k3kzZsXTZs2haWlpTarnSk9PT08evQIixcvRpkyZTB48GAUKVIEbdq0waxZs7B161acPHkSzZo1w5kzZ9C7d29tV/m9zZ07F0uWLMH69etx4MABAECrVq3QoEED9OrVC+XKlUOfPn2gr6+Pbt26wd3dHe7u7sr2pUuXxvLly5E3b15t7cK/Sv9AKSwsDGFhYdi3b5/G5JojR45Ehw4dsHbtWqxduxbJycnZtgGQmJiI6Oho5MqVC6GhoUo98+fPj+HDh8PZ2Rn/+9//EBAQAGdnZ/Tv3x+urq4wNzeHSqXCo0ePEBsbizFjxiBXrlxa3psP925joVSpUtiwYQMAICAgAHv27AGQ9oBnz549KFCgAC5fvqycj3IC9STTq1evxsyZMxESEoLx48fDwsICISEhWLhwIV6+fInu3bsjJiYGDRs21HaVFYcOHUJ8fDwAwMHBAVOnTsWsWbNQs2ZNnD17Fu3bt0fz5s3RokULNG3aFEuWLMFvv/2G8uXLa7nmHycxMVG5IX/27BmioqJgZGQEe3t7dO3aFRcvXsTZs2eRO3duzJ8/H4aGhjAzMwOQ/R8cvH37VqljbGwskpKSYGZmhrJly8LR0RHBwcG4dOkScuXKhSVLlqBIkSLIly+flmtN2VlqairGjBmD9u3b49q1awDSbvANDAzw6tUreHh4oGDBgpg7dy5q1qyJixcv4ujRoxARpKam6ly7P7uJjo7Gr7/+irlz5yrB8aZNm6Ju3bro1asXypYti6FDh6JgwYIYPHgwfHx88O233yrbV6lSBWvWrIGRkZG2diFHSkpKQo8ePRAQEICoqCgAwMuXL1GsWDG8efMGbdu2RZ48ebBjxw4ULlwYAwcOVNpEALBp0yZcvnxZeYBLGaWkpMDJyUnjXu7cuXN4/vw5RAQeHh6oWrUqFixYgLi4OMyZMwd9+/YFkPbg78SJE4iPj4epqam2diHbS0xMRJ8+fXDhwgXo6enBwMAAN27cgJWVFZKTk+Hr6wtvb29MmTIFGzduhJ+fnzKhfFJSEh49egRDQ8Ns3zbSNbdu3cKCBQvQpk0bAICJiQlatmwJlUoFLy8vfPPNNxg0aBCcnZ3h7e0NLy8vFC1aFAAQHh6O1NRUTJ48Gblz5+Z78x4OHjyIBQsWYM2aNbhx4wbi4+PRqFEjlClTBu3bt4elpSW8vLxgZmaGpk2bwsTEBLa2tgDS2t1JSUkYMWJEtu6syXQu2cStW7ekZMmSsnTpUrl8+bK0adNGihUrJqtXrxaRtAkPVSpVhmH7T58+zZaTVGZGPawpODhYChcuLJ07d5Zvv/1WbG1tZceOHSIiEhgYKNWqVZPmzZtrbBsXFyfe3t5y5cqVL17v9NKnzejcubO0b99eREQ2btwo9evXlwkTJijpP5YtWyZ2dnbZfmKEvXv3iqWlpRQqVEjOnTsnIv+Xw83Dw0Pmzp2rsX52SJfwPnbs2CFGRkZSr1498fX1lTNnzijL1CkyRES6du0q48ePV5alT+miC1JTU+WXX36R5ORkefjwoXh6eoqlpaVcvHhRY72AgIBsncIlOTlZ+vTpI40aNZKIiAjx9PSUkiVLagy7TkxMlA4dOkjRokUzTEii/m7qeg7ie/fuZRhGGxoaKo0aNRJnZ2flO5qernwns5KQkKCkZQkLC5OCBQuKr6+vlCpVSpycnGTw4MESEhIiLi4uUrlyZXFycpKmTZsq39XskHJp3759YmhoKPPnz5cff/xRunfvriybN2+emJmZyZ49e0Qk7Xp+8+ZNnUxlkpWEhATx8PAQe3t7sbOzU3LYe3t7i729vfTq1Uv69+8vRYsW1Zm5GNTevHkj7du3F2dnZ3Fzc5N58+ZJbGysNGnSRGrUqCHTpk2ToUOHiqmpqc7tG2nH4cOHxcvLSxo2bKjM9RMVFSUbNmyQpk2bKut9//33smvXLo1rnS61+7MbdUrMq1evSoUKFcTDw0NCQkJEJK0t1aZNGzl27JiIiPj6+sqoUaOUbXX9OqsL/P39pX79+jJr1ixJSEiQ4OBgefLkiUyaNElat26tsd6WLVs0rv1XrlzJME8OaXr79q1s3LhR8ufPr8QTXr9+LQ8ePJBZs2ZJp06dlHV79+4tFy5c0LjvPX/+vDJnFmXu3Llz0rBhQ2nUqJH8+eefIiKyYcMGefTokXh7e4uvr6+IiFy6dEk8PT1l2bJlyuc4Li5Ohg4dqpEvnT6e+vp59OhRKVy4sMbn/OHDh+Lm5ibPnz8XkbTUg+oUqCL/d2/5bpph+ncLFy4UZ2dn8ff3V45vVFSUtGrVSknF2q1bN1mzZo2yjfq+LrunCxZhTvRsY8qUKUrg5OHDh+Ll5SVeXl5iZmYm27ZtE5G04HP6BoMu5k99/vy5VKtWTcn7uHbtWnFwcBBbW1vZuXOniIhs2rRJOnXqlOELlB0CJWpdunQRV1dXJa9rdHS0TJw4UZydnaVkyZLStWtXMTMzyxDI1La4uDhZtmyZxuzrImk3dPb29jJmzBi5f/++Ut6wYUPlQY4u6tu3r3To0EFcXFykTZs2yiS99vb2UqFCBXFychJra2udC5ynt2LFCqlatapMnz5dkpOT5cGDB9KxY0epUKGCTuVMTU1NldWrV0vTpk2lffv2cuzYMWncuLFUrVpV41zwv//9T+zt7WXKlCk6eQ7MTPpzW2BgoJiammaY1Pby5cuSJ08eqVevnvI5FtHN68C7Nm/eLOXLl5f+/fvL999/LwEBASKSlld7wYIF0qBBA9m8ebOIpOWWfPjwofKZyE6BjenTp4uVlZXY29vLqlWrROT/3p+RI0dK5cqVlUk1c4Iff/xRmcukW7du4uPjI1evXpVly5ZJtWrVxMPDQ0REVq5cKaNGjZKZM2cqecSzu7Fjx8p3330nIiJt27aVjh07yu+//y4jRoyQ2rVri5+fn6SmpsqIESOkX79+Mnz4cLlx44aWa03Znbqt8eDBA/Hz85MiRYpI48aNlUCuuk18/Phx6dy5szg5OWlMGp4Tzvfaoj52Fy9eFE9PT2nZsqXkyZNH3N3dldzEDg4OUqxYMXF1dZWqVavqdNtQl6gfbjx79kyaNWsmlpaWEhAQoHRCGjp0qAwbNkzi4+PF19dXOTeLpLUBdCHgom3qduaDBw9kxIgRolKpZMKECcryH374QTmuPj4+4uHhkS3bWbrg119/FU9PT3Fzc1PaPK9fv5bWrVvL/v37RSStA9fEiROVbdTHODvFOnKC9JNatmrVSpydnUWlUkmrVq1EJO2429rair29vXh4eEilSpX4ef8I6uN9/fp16dKli9SsWVMMDQ1lyJAhcuPGDYmKipIiRYpI69atpUGDBlK1alXleKdv3+hCW4dBdC159yTZokULmTp1qoikNeImTZok169fl7x584pKpZIFCxZkua0uUH+pbt++Lc7OziKSFnj+7rvvZPLkydK8eXOxtLRUJnh4dzsR7X6h3m2gde/eXXLlyiUTJ05UJrF5/fq13Lt3TwICAmTXrl1y9+5dbVT1H/n5+UnBggXFzMxM2rdvLzNnzpS4uDgRETl27JjUrVtXOnbsKBMmTJDevXtLzZo1M0xmqwvUNz5r166VyZMny+3bt8XNzU1at24t165dk5iYGJk3b5789NNPyslbVy6a797UxcXFydixY8XFxUWmTZsmycnJcu/ePfHx8RFTU1Od6NGg/m6npqbKpk2bxN3dXdq3by8nT54UNzc3qV69ujKR0ffffy+jRo3S2EaXqet/7949ZSbybdu2SYUKFTQmVXn9+rXync1pN4wxMTGycOFCadSokZibm2s8JFBPCKyeuDm97HAcUlNTNeoxb948yZUrl/Tv3185t4qInDhxQho1aqQz55n3ce7cObGyshJbW1vp1q2bMjFQSkqKXLx4Uezs7JSHH7rk7du3smHDBrGxsZGGDRtKly5dlPPumzdvZPv27VK3bl25cOGCso2un4foywkODpZvvvlGpk6dKr1795ZmzZpJgwYN5Pr163L16lVxcHCQOnXqyLfffqtTvbJ0wd9//y0VK1aUn3/+WRITE+XBgwfSqFEjadOmjdy8eVPevHkj8+bNk59//lnn2oa67uLFi2JtbS1DhgyRmjVrSvXq1WXWrFny+vVrWbBggejr60udOnWkevXqyveC590Pc+3aNSlZsqQMHTpUvv32W8mdO7cMGjRIRNJG737zzTdibW0ttra2PMYfKH3wsF69etKwYUPJly+fuLq6yh9//CEiIo0aNVLO7emDtTzGn1dYWJhYWFjI8uXLJTQ0VA4ePChly5aVFi1aiIjIkSNHxN/fXwYNGpStRrjqqkePHkmxYsVkwYIFEhERIUuWLJEmTZrI0KFDJSEhQY4cOSJ9+/aVIUOG6PTxZhBdi27duiX/+9//RCStUX337l0ZNWqUMswkJSVF/P395fTp0zrbiFNfGF6/fi0iaftZr149iYqKEicnJyVINHLkSHFxcZHmzZtnu4tJ+mP/4MED5f9Dhw6V8uXLy/r167N9yha1uXPnSosWLeTRo0cyaNAgadasmVhYWEj//v3l0qVL8uuvv0qdOnXExsZG+vbtq2yX3XvjxMXFybZt2zTeHxGRx48fi7m5uRw8eFDu3LkjDRo0kDZt2siJEyc01tOVk7c6KPfu+/Hq1SsZPXq0ODs7K0HWO3fuSI8ePbLlw5zMpA+Kb9y4UZo0aSLt2rWTkydPSoMGDcTIyEgcHBykYsWKyndS1wML6s/d06dPJSAgQFQqlWzZskVERLZu3SqVKlUSb29viYiIkI4dO2qM0NH1fRfR3IeYmBhZvHixmJmZaaRCEUnr1dOyZcts9z1Nf22Ij49X9mfp0qVSunRp2bRpkzKEce7cueLi4qI8DNJl6a/RFy9elJo1a4qBgYGEh4eLSNr7+ubNG3F3d5exY8dmul12lb7NsmPHDrG1tZUiRYpojCCIiYmRatWqaaQ604V9I+1LTU2Vnj17ypAhQ5SyCxcuiJ+fnzRu3FgiIyMlMTFRwsLC2Av0M7h06ZLY2dlptKGeP38ulSpVkkaNGmVIl5bdrjk51evXr6Vhw4Yye/ZspWz27NnSuHFjZWTan3/+KSdOnFDeE34vPkx8fLw0aNBASZ2XkJAgJ06ckPz58yspLe/evSuHDh3iMf6Pnjx5IqVKlZJFixZJcnKy7Nu3T/r06SOurq7y4MEDuXTpksybN08mTJjAnuefWfr7i6NHjyodONXu3bsnhQoVkj59+mTYlp/7j3Pw4MEMaZl37dollSpVkkGDBin3Cmq6erwZRNei6dOni0qlUvKBi6Tl2VZfzDp16iRt27ZVlunqh+zvv/+WYsWKyb59+0QkbYj+iRMnpEmTJso6fn5+SjoXkexzQ6q+uKWkpEjz5s2lRo0a0qRJE/n7779FRGTQoEFSvnx52bBhg8TExGizqu8lLi5OSpUqJZs2bVLKVCqV1K1bV/T09KRz585SvHhxsbOzEz8/PyVnVXaWkpIixYsXF5VKJe7u7tKtWzd5/Pix8mBj7dq14u/vLyJpjXAbGxsZM2aMNqv8n8yZM0caNmwokZGRMmzYMClWrJjG9yQhIUF69uwpJUqUUHLz69o5491AeosWLWTAgAESGRkpS5YskZUrV+aYhqd6X69evSpWVlbSs2dPKVOmjJQsWVKWLFkiIiK7d+8WCwsLqVSpktjb2+eoXonq9y8sLExOnjwpd+7cEZG0ALSrq6tMnDhRGQXToUMH6datm9bqmpn01wZvb29p1qyZVK1aVaZMmSKvX7+WJUuWiLm5udjY2Iifn5+YmZnpVHqlrKQ/p6j/f/nyZbGyssrQaB44cKBMnz79i9bvY7zbKyw1NVUCAwOldOnSGdIr9erVS6dTnZF2pKSkiIeHh0ybNk1E/u+ztn37dsmdO7fUrFlTyZGuXp/+u3ePX2hoqFSoUEG531AvHzNmjBgaGioBRvqyoqKixMbGRn7//XeN8n79+omJiYlMmDBBo7OSrrf/tCElJUUaNWok27dvF5H/O4YLFy4UlUql3Cep8Rj/u9jYWI0UddeuXZMGDRpo3JtduXJFyZH+7shgHuPPI332gz/++EO2b98uVlZWEhsbKyJpHdGSkpKkWbNmolKp5McffxSR7BN70jXvHrd9+/ZJgQIFlHkM1ctbtGghxYoVk8WLF3/xOn4ODKJ/QZl9OcePHy+5cuVSLmrq3ogODg5SpUqVHDGcKiYmRnr06CF58+ZVhukHBQVJwYIFJSAgQDp27Ch2dnbKxSS77Gv6Hp/Vq1eXNm3ayK+//iomJibSqFEj5Umav7+/FClSRLZs2ZJt6p4Z9fEdOXKkkjanUqVKymQ9QUFB0r9/f/Hx8ZHAwEBxdnaWjh07ytWrV7VW5/d1+PBhUalU0r17d6lXr57Url1bunbtKmfOnJFz585JvXr1lMlwbt68qZM3pqtWrZLGjRuLl5eX/P7779KoUSOpVq2axr6cPn1aKlasKL169ZLIyEgt1va/U3+HkpKSZNGiRVKnTh15+PChxjo5peEZFRUllSpVkjlz5oiISHh4uKxZs0bKlCkjy5cvF5G0RvqlS5dyZK/Eq1evSrFixcTKykpq1qwp69atExGRxYsXi62trVhaWkr79u2lXr162fJamJKSInZ2dtKhQwc5ffq0jBw5Uho3bizt27eX5ORkWblypahUKpk4cWKGz7AuSn9N9Pb2Fi8vL+VacuXKFalataq4ubnJ0qVLZfbs2WJoaKgzecLT71vv3r1l8ODB8ssvv4hI2jwFderUER8fH9m7d6/MmzdPjIyMNIKdRJnJ7Fo1atQoKV++vMYEfbGxsdKgQQOZMWOGTrZPsiP1sY+IiJDg4GA5efKkpKSkSMuWLaVt27Zy+vRpZd1evXrJ1KlTeey/kMyOc/PmzaV///5KoEtE5NSpU2JpaSnjx4/PVtd+XfDuMU5MTBR7e3ul5636eP7+++/i7Owsrq6unHfhA/Xu3VvmzZunHLMzZ86ISqVS5kNTn4N69eol33zzjQwYMEBEslc7NqdRf+7v378vxYoVk61bt8rbt2+ldOnS0rFjR411u3XrJlu3bs0x95TaoD52MTExEhMTI3FxcfL69Wtp3LixDB06VKOd0717dxkzZkyOuc4yiP6FPXv2TJlASG3s2LFiYGAge/bskcTERDl+/Lhs27ZNZ4dTZVbv6OhoGTx4sOjr68vRo0dFRGTw4MFSr149+e6777JtTqTU1FQZPXq0tG/fXkTSGiFDhgyRAgUKiKOjozx9+lRERMaNG6f0pMzuDh48KPny5RMTExONkQ4i/5d2RyQtnUSjRo0kIiLiS1fxPzl06JCYmJjI4cOHZcuWLfLDDz9IoUKFZPz48WJmZiY9e/bUmF07u33W/k1qaqps3rw5Q75wGxsb5fuzdOlS6d69u5KbWFel73FUq1YtZdKvnELdgI6IiJC6detqBFjj4+Nl8ODBYmRkpATS1XJCw0O9D8nJyeLh4SErVqyQ0NBQ+eGHH6RWrVpKXviVK1dK2bJlZfTo0dnuAYL63LFlyxZl8ky1bdu2ib29vezevVtE0tK46EpKpX+Svne2k5OTNGjQQIYOHSq5cuWS4cOHi0jaQ5EaNWqISqWS6dOnKxNv64rU1FSpVauWODs7S/v27cXc3Fx++uknEUkLpFtZWYmRkZEMGDBArl27puXaUnanPm/dunVLpk6dKkOHDpXIyEgJDQ2VVq1aiYODg5w+fVqePXsmPXr0kGbNmuWodF3apD5+ly9flnLlykmtWrVk8ODBIpKWsuLbb78VJycncXV1lbZt20qFChVyzCi37E59fENDQ2X9+vUyadIkERH56aefxNnZWaZOnSphYWEikhZ0GTBggPJ+Mvj4ftTH+O7duzJ//nz56aefJDU1VU6cOCG5cuWSESNGyLNnz0RExNfXV4YNG5Zj5hn60t68eSNVq1ZVAuc+Pj7i7Oys8ZDd19dXZsyYwWP7hTx9+lS8vb1l6NChStmZM2ekaNGi4ujoKCNGjJB27dpJxYoVdTbWlh2oP8/BwcFSq1Yt+fbbb6VJkyby4sUL2b17t9StW1dcXFxk7Nix0rZtW7G1tdUYxavrGET/QlJTUyUuLk4aN24sPj4+GXr3durUSQoVKiRbt27VKNfVxlxoaKhMnjxZ4wnUy5cvZdCgQZI7d265dOmSiKQFbdP3PM0O5s6dK4cPH1Ze9+7dW5nBvFOnTjJ06FC5deuWkgZFHSzRJR07dpRmzZopr9899ur3RNfy9+7du1cKFSokgYGBIiJy8uRJGT9+vJQqVUqZiVsX/Vu+cGNjY2nfvr3kzZtX54M7N27ckIEDB8r69eulZ8+e4uDgoLPnwXep38eEhAQRScufWKhQIVm5cqWI/F+jYuXKlVKzZk2pUKGCrF+/XjuV/QzU7+PDhw/lwIED0qNHDyU11t27d2XEiBEagfSdO3dmm6DS8+fPlfOK2rJly8TOzk5evXqlcXNUu3ZtjTkldF3660NYWJj06tVLKd+5c6cYGhoqgfQLFy5I48aN5f79+9qo6gdLv2/3799X9u3Zs2fy008/iYWFhRJI37Jli3h6eioBHqKsqM8Hf/31lxQqVEg8PT3FyspKypYtqwwx79y5sxgZGUmDBg3E2dk5R6Xryg4ePHggJUuWlPXr10tSUpKkpqbKb7/9JseOHZOXL1/K//73P5k4caIsW7aMAfQvRP29uHz5spQoUUI8PDyUiS1FRCZOnKi0aZs2bSpVq1bl9+IDpU8VWKRIEWnTpo3GPDN79+4VMzMzqVKlijg6OkqdOnWy5Ui/7Ex9vG7evCmXL18Wd3d3MTc3l7/++kvOnz8vnp6eUrhwYenTp480bdpUqlevnmPmcsqu0h/XrVu3Svny5aVcuXIaI1uePHkiffr0kaFDh8qPP/7I8/5HUB+zJ0+eSPHixWXWrFmybNkycXd3l9q1a0tUVJRcu3ZNpkyZIl27dpUxY8Zk2w6z/xWD6J/ZuyfLrVu3iqOjo/Tp00fJFSQismjRIqlatarUq1fvS1fxk1Hv6/Pnz2XlypViZGQko0aN0pjs8cqVK2JoaCgqlUpjAp/sclFZt26dqFQq6dChgxw4cEBE0npHBAcHy/Tp08XOzk5E0vaxZcuW4uvrm2EyS10wc+ZMsba2znK5LvdI2L9/v+TNm1cjx35cXFy2Sxf0od4NpDdr1kz8/Pzk0aNHMnHiRBk/frzO9fzMzNOnT6V3795So0YN8fDwyHEX3WfPnkmJEiWUETnjx48XGxsb+fXXX5V1/Pz8ZPjw4TJ69Ghp3bq1vHz5Umc/t2rpb55NTU3F0tJSVCqV/Pzzz0pDNjQ0VEaNGiWlSpWS/fv3K9tmh+vDqVOnRKVSyZw5c8THx0dCQ0Nly5YtUqtWLaUHktrAgQMzjCLQVekfYrRu3VqaNm0qVlZWyoOgN2/eyLZt2yR//vzSv39/pUwXpN83X19fadGihdSuXVv5PD558kTmzp0rZcuWlRkzZoiIaNyQEWVGfa6Ljo6WXr16Kfk/o6OjpXnz5kogXSQtZ2tkZGS2G22TE+zZs0fc3d3l9evXcvbsWalYsaJUq1ZNVCqV/PDDDxnWzyltjOwuMjJSqlatqqTLSkxMlNmzZ8uoUaMkODhYYmJiZN++fXLu3DnlPeF782FevnwpVapUkZ9//llE0jpuTJs2TYYPHy6BgYESFxcnp06dkqCgIPbE/QDpP4f379+X/Pnzy9KlSyUlJUVatWolFhYWcv36dXnx4oUsWbJExowZI7NmzWKw9gt59OiRcu8fGBgodnZ24uPj84/tNr4n/93t27dl+fLlGvPMXbhwQZo3by61atVSOpykv4fLSecZBtE/I/UX89GjR7Jr1y6l9/WhQ4fE3t5e+vfvL3/88YeIpA1Z27Nnj84GStRfkJs3b0qRIkXk/v37sn37drGwsJDhw4drpCsYMmSILFmyJFt+kQ4ePCj58+eXunXrSvfu3eXMmTPKsr59+yo9JBcvXix9+vTRSH+ia6pVqybjxo3TdjU+iwMHDkj+/Pll06ZNGp8zXb9Ypk+FsXLlSqlTp44yWWF2CDR+KklJSRq9e7PjueK/evnypfj4+Ei+fPnkjz/+kFevXkn//v3FxMRE3NzcxNXVVapXry4iadeKunXr6tyIkHep38e4uDjx9vaWxYsXS2Jionh7e0ujRo1k7dq1ysOSW7duydKlS7Pld1U9AVfFihWVMkdHR7Gzs5OdO3fK9evXZdGiRVKsWDGNyaZ0VfoHj05OTtK8eXPp27evlCtXTvr3768sT0xMlA0bNkjx4sXl2bNnOtGOSb9v6gnDW7RoIRUrVpQ5c+Yo59OnT5/KlClTxNraWqKiorRZZdIhz58/l9atW4u1tbXs27dPKU9ISJAWLVqIhYVFhlFjOekarg3vnndOnDghZcqUkfLly4uNjY34+PhITEyMzJs3T7p3787jrSX3798Xe3t72b9/vzJ5ep06daRMmTJiaWmZ4SFsdmwLZEfq4xQbGyv37t2T5s2by/bt22XDhg1ibm4utra2UrduXXFwcMiQ8pHH+N/FxMRI06ZN5cGDB/Lw4UMZOXKkxmSsb9++lVatWsk333yT6YhgHuPPKykpSfz9/aVmzZqyefNmERHZvHmz1K9fX7p06SJxcXHKevTfpb9ujh07VlQqlbi5uWk8qPjjjz+kVatWUrJkSZ1JCfxfMIj+magbc1euXBEzMzOpXr26FClSRKZOnSpJSUly+PBhcXR0FFtbW6lRo4aUL19e54f6PH36VDp06CBTp05VyrZu3SqlS5eWgQMHyv79+6VTp07i4uKSrYNj/fv3l8aNGyu5EtWpXZo1ayblypWTLl26iImJiRK81DWpqamSnJwsnp6eSs/BnCgwMFDc3Ny0XY1PTt0DVETEyclJ9u7dq8XafH66ej5Uy6wnVVRUlPTu3VsMDQ2Vh6snT56UBQsWKI0/kbRRMI0aNcoRvV8jIiKkfPny0rBhQ6UXZnR0tHh7e0uDBg1k/fr1SiBdLTvcdKSvQ0BAgFSpUkX09PQkICBARNLOp56enlKjRg2pXr26fPvtt8p7mhOoR754e3uLSFrAfOnSpeLk5CR9+/ZVruWJiYk69zlNTU2VwMBA6dq1q4ikPeQZPny4uLm5ycyZM5V9e/bsmc7PM0Ff3uTJk8Xc3Fz8/f2V+XNE0kZqODo66nSKuexGfZ7++++/5e7duxIcHCwiIjt27JA1a9ZojGxq166d9O7dWyv1/Bq924aLjY2VJk2aKB2W1Pcht2/flhYtWvBh5X+gPsYhISHi7Owsf/75p1SsWFFKliwpDg4OSsocdbq158+fa7G2uicmJkasrKyUNH0LFy4UU1NTqVatmkba2rdv30rbtm1FpVJplNPn8e655e7du9KnTx9xc3OTjRs3ikhaIN3V1VU8PDx0uuNjdpI+peGkSZPEwMBAtm3bJomJiUr56dOnZfjw4dniPu5zYRD9M1DfeEVGRkqHDh2Um+2JEydK7dq1ZdKkSfL27Vu5fPmyLF++XOeH+qSmpsqbN29k3Lhxki9fPiU3qtqOHTukZs2aUqtWLXFycsq2udfU9dqzZ4+MHz9erl69Km5ubuLp6SlXrlxRJkf94YcfdD7vtEhaXmJd/Lx9iOz2GftYf//9t8ycOVN2794tq1evFgsLC51MJ/S1CQ0NlenTp2u8Vy9evBA/Pz8xMjKSCxcuiEja+f/ChQsya9YsGTNmjBQuXFhnH9ZlpkOHDqJSqWTjxo3K+TYmJkY6d+4s1atX1wh0ZAfpH2zfuXNHGZm0atUq0dPTU1J8iKQ13iMiIuTly5faqOpns2LFCilevLiYm5srk2fHxsbKokWLxMXFRbp06aKz59kZM2aISqWSGjVqyJMnT0Qk7Xs5bNgwadSokYwfP15n942+LHVbKiEhQSMIuHjxYrGzs5NJkyZp9Mh6+/atzj8gzi7Ux/HKlStSuXJlcXFxkUqVKsl3330njx49EpG0Uab9+/eX1q1ba+TZps9L/b24f/++7N69W5YtW6Y86Lh8+bJcvnxZOcd26tRJmjRpwnPuf/To0SPx8fGRKVOmiEjanFYXLlzQGBXXo0cPcXd357nnA8TExEi5cuUyzHOzevVqsba2lvHjxyvnGZG0DgWjRo3K8ffX2vLu+eHdns73798XPz8/cXFxke3bt4tIWpu9b9++/Nx/Am/evJGaNWuKjY2NUjZ06FAxNDSUzZs3Z3ptzanfBQbRP5PIyEhp1aqVeHh4aAzFnz59utSuXVumTJmizIytpmsfsnfre/v2bfHz8xMrKyvZsmWLxrLHjx/L48ePs13ex+PHj2foYfb06VOxtLSUwMBACQ0NFTc3N2nbtq1GapecRNc+dx8qJzXIIyMjpVevXmJpaSk2NjYZcjFT9rR582YxMjKSCRMmaDzBv3jxouTKlUtUKpUEBwdLSkqKBAUFib29vfTp0yfDBNS6RH1eefPmjcTExCjlvXv3loIFC8rhw4eVxtbLly9l4sSJ2aqBmz5ftoODgzg7O0vhwoXlzp078ubNG1myZIno6+vLokWLZM+ePXLkyBEt1/jTyOx6sHjxYqlQoYJMmjRJHj9+LCJpvbbnzJkjTZs2VQLQ2V1m+zZq1CgxMzOTX375RaKjo0UkLZDep08f+e6779hjj/6V+lxx7do1adKkidjZ2UmdOnVkxowZkpycLEuWLJFatWrJ5MmTNYIt6beljxMWFiblypVT8s9HRESISqWSNWvWSEpKisybN086duwogwcP1ulOS7ok/QSXZmZm0rp1a3Fzc5MSJUrIqlWrJCkpSY4cOSK1atUSV1dXqVatWrbtZJXdxcfHS48ePcTY2FhOnz4tImnHMDU1VXbs2CH29vZSt25dqVGjBidq/QCxsbFSoUIFGThwoEb50aNH5e+//5b58+eLvb29jB8/XsLDwzNsz3PMp/fgwQMlcP769WupVq2aNG3aVGOdsLAw5WHqqlWrNJbxc/9xUlNT5ezZs1KhQgWNeRyHDRsmRkZGsnr16q/mc88g+mdy6dIladeunRgYGCi9DNVmzpwpZcqUkTVr1mincp+AuhF6//59Wbt2rWzYsEFu3bolcXFx0q9fP7G3t9dIS5C+QZRdTmAeHh6iUqmkVatWMnDgQImJiZH4+HgREdm5c6f06NFDRNICXTVr1hRfX19lOZG2vH79Wp49e8bgTjYVFxcny5Ytk5MnT2qUr1mzRszNzWX06NEagZQhQ4bIggULMuTu1+WbSPU5Pjg4WBo3bixOTk7i7u6uPFzt1q2bmJqaytGjR7NlChe11NRUcXV1lY4dO4qIKD2xX716JY8ePZIlS5ZIwYIFJXfu3PLXX39ps6qfRPqe91u3bpVFixbJ2bNnRSRt8nM7OzuZOnWqEjSPi4vTmaH36n1LTU2Vo0ePyoYNG5QbsR9++EHKly8vGzduVB74REVFZejoQPQu9Xn61q1bUrRoUZk+fboEBQXJ6NGjpX79+tKvXz8REWWCWl1u92dn+/fvV27oExISpG7duuLn5yd//fWXRopJtex0ncnJnj9/Lvb29rJw4UKlTF9fX6ZPny5JSUly6dIlmTVrlixdulQ5R2eXTlbZnfrcox79dujQIalatao4ODhotB8jIyNl8uTJsmXLFh7jD5CSkiK1a9cWW1tbjfKdO3eKSqWSc+fOiUjaud3BwUH8/f3l77//1kZVvxpv376V9u3by8KFC+XcuXOyYcMGOXTokBQvXlw6dOigse7ChQulevXqHFH4kdTXylevXinzVaSmpsqFCxekbNmyGoH0nj17iouLi1bqqQ0Mon8i6g9Z+nxLDx48EE9PTylXrlyGHqMbNmzQyUbcq1evlCH3V69elRIlSkijRo3E1tZWDA0NZdeuXRIZGSn9+vUTBweHDE8As5PDhw+LSqUST09PcXBwkBo1asjQoUPlwoULcvfuXWnSpImEhISIiMjly5eZNoOI/pWfn58ULFhQzMzMpH379jJz5kxlQpvAwEAxNzeXoUOHysGDB8XHx0caNGiQreeI+K9u374tpqamMmXKFAkLC5OBAwdK8eLF5dSpUyIi0rVrV1GpVPLnn39quaZZCw8PF0dHR+UmNTU1VZKSkmThwoWybNkyEUm7zqt7Z+sy9WcwJSVFbG1txcPDQ+rXry8eHh7y3XffiYjIlClTpG7dujJ69GiNHM/ZXfp9q1mzpjRv3lwqV64sLVq0UCYG69Onj1StWlVWr16tc7nd6ctL3xkkOTlZJk6cKMOGDVPKUlNTZenSpVKzZk3lAdv69et1st2fHb17HNesWaNMyG1nZyft2rUTkbRRNOrzF315Dx48EFtbW4mNjZU3b96InZ2ddO3aVcLDw6VevXqc4PIjPX/+XBo0aCAzZ84UkbS5dezs7MTd3T3LlEU8xu/v2LFjUr58efn5559FJC3dq4mJiRw8eFBjvQkTJkjPnj0ZrP0ClixZIiVKlJDcuXPLypUrRSTtfTI1NZVOnTop6/Xr10+mTJmivCd8b/67uLg4JT2OOpCekpIiFy5ckEKFComnp6ey7td0nPVAHy0lJQX6+vr466+/0KZNG3h5eWHx4sWwsLDAnDlzULt2bXh7e+PKlSvKNj4+PtDX10dKSor2Kv4fbNmyBc2bN8eGDRuwYcMGjB49GocOHcLRo0cxefJktGnTBvfv38eYMWNQvnx5nD17VttVzlLDhg1x6NAhHDlyBBMnTkTv3r3x9u1buLq6YteuXQgLC8P48eORkJAAW1tblC5dWttVJqJsrmLFinB2dsaFCxdQokQJnDhxAlWqVMGAAQNgZWWFKVOm4PTp05gwYQJCQ0Nx4MABqFQqiAgMDAy0Xf2PIiLKNW3btm1o3749Ro8eDQsLC5w5cwZt27aFqakp7ty5gzVr1mDs2LGwtbXVbqXT+fPPPxEYGIgtW7bg1KlTyJMnD+7du4d9+/YBAFQqFQwMDJCSkoINGzYgKSkJpUuXRsmSJbVc84+nUqkAAD179kTZsmWxZ88eHD9+HPHx8YiOjsarV68wevRoNG7cGOfPn9epz6p637y9vWFlZYW9e/fi+vXrePz4Me7evYukpCQsWbIEdnZ2WLZsGUREyzWm7Cw+Ph4DBgzAkSNHAAD6+vp4+vQpwsLCIGmdk6BSqeDj44Pw8HCcOXMGANC5c2edbPdnR/r6+rh9+zbmzp0LAGjatCnCw8ORL18+ODk5Ydu2bQCA3377DVZWVtqs6lfl3XNndHQ0oqOjERoaivr168PKygpr1qzBy5cvkZycjHz58mmsr6+v/yWrq/Pevn2LmjVrIjAwEAsWLICzszPmzZuHly9fomXLlkhMTMywDY/x+3NxccGqVasQEBCA7t27o0uXLti5cycaN26MlJQUJCcnAwDGjx+P5cuXK215+vTUx7Vr165ITU1F3rx5ISJ48eIFXFxcsG3bNhw8eBCVK1eGs7Mzjh49iuHDh0OlUiE1NVVpB9K/e/XqFUaNGoWOHTuiVatWSE5ORq5cuTB79mwcOnQIb968gZ6eHqpWrYq6desiMDAQffv2Vbb/ar4D2ore5xTqnoPBwcFSuHBh+fHHH6VZs2ZiZ2cnM2fOlJSUFLl375506tRJChYsKLdv39ZyjT/e9OnTRU9PTypWrCjHjh0Tkf978tSjRw/p1q2biKRNtJZdUrf8k71794qJiYn8+uuvIpI2JG7gwIFSoUIFqVSpktKLlIjo38TFxUmpUqVk06ZNSplKpZK6deuKnp6e+Pr6iqurq9y7dy/bzRHxX129elV2794tImlD6UVEBg0aJJ07d5bExESxtbUVLy8vERFxcXGRESNGaGyfHfbfx8dHnJycxNraWiwsLKRIkSLSuHFjadeunfj5+WnMiTFr1izp0aOHTlzf/s27vdKaNm2q5Hf39fWV6tWrS1RUlPTp00eOHj0qIqKTQ5ajo6Olfv36yjwD3bt3F1tbW/n777+lf//+cuPGDRHJOEkV0bsmTpwoKpVKOnfuLAcOHBARkdmzZ4urq6vcvXtXY93vvvtOjh8/ro1q5ni7du0SlUolkyZNEpG0Eb7ffPONfP/997Jt2zZp3769VKtWLVtcX74G6mvJ8+fP5dq1a0pbwNPTU1Qqlfj6+irrdujQQVq1aqWNauq0zHqRh4eHy/jx46VWrVry008/iYjIiRMnpGzZsspIK/o4p0+flrx580qfPn0yLEvf8/Zr6oX7JaVvayclJUlISIgsWbJELCwsZObMmUqb9P79+zJ+/HiZNm0a5774j2JiYqRSpUri6+sr48ePl0GDBimjbTt06CB2dnayd+9eSUxMFJG0Hv8nTpz4Ko8zg+j/0Zs3b5RJqKKiosTBwUHmz58vImlB2Dp16kjt2rVlzpw5SiB93LhxOvshe/fCMHfuXFGpVLJ06VIREWXY2NSpU6Vz584a6+pCoGH//v2SN29e2blzp4iknXQjIyMlNDRUyzUjIl2hPr+PHDlSZs2aJSIilSpVktatW4uISFBQkPTv31+aNGmiMXGlrlu/fr2oVCqZOnWqtGrVSiIjI2XOnDlSr149qVatmsY1oVmzZhrzZWQHLVu2FHt7e3ny5IkkJSVJVFSUbNiwQSpUqCB6enri4eEhnp6e0rdvX5k0aZIUKVJErly5ou1qfzKpqaly/vx5EUl7yPHDDz9Ijx49pEaNGkogxNraWllHF7zb1nr79q04ODjI4sWLpXv37lK9enXlJqBcuXJy/fp1bVSTdNCOHTvEyMhI6tWrJ127dpWzZ89KXFycVKpUSZo0aSKbNm2Smzdviq+vr9SqVUtn2/3ZSVbBqa1bt4q+vr7MmDFDkpKS5NSpU+Lm5ia+vr7Sv39/BlK+EPX7c+XKFalcubJYWVlJtWrV5MSJExIaGiqtWrWSsmXLSv/+/aV58+ZSvXp1TiL6H929e1e6dOmiXL9ERB49eiRjx46VSpUqydq1a0UkLQ0pP/efzunTp8XS0lLmz58vkZGR2q7OV0P9Gb5z547MmzdPSa0jktaps1SpUjJ37lyJiYnR6Owikj066OiShIQEsbe3l759+2qUh4eHS3BwsISEhEiDBg3E0dFRBg0aJO7u7lKlShXlPfrazjcMov8HycnJ0qdPH2nUqJFERUVJQkKClCtXTkTScoa3aNFCfv75Z/Hy8pKiRYtKhw4dNHKT6dqHTF3fuLg4iY+PV/Zlzpw5oq+vL0eOHFECQT4+PjJo0CBtVfWj7N+/XwoUKCCbN2/OMpccEdG/OXjwoOTLl09MTEykbdu2GsvU+eREckYAXa1Pnz6ip6en5KKNjo4WOzs7KVy4sJw+fVoiIiKkc+fOUr169WzVsP3pp580JuJSvyeJiYmyZ88esbS0FF9fX1m0aJE0b95chg4dKteuXdNmlT+5ESNGiI2NjYikTSBatmxZKVOmjBJAX7RokVSoUEGZUDS7Sz9B6u7du2XOnDkSHh4uAwcOlJIlS0qlSpWU7+FPP/0kNjY2nKiZPkjfvn2lQ4cO4uLiIi1btpSQkBCJjo4WT09PqVq1qjg7O8t3332ntCV1rd2fnaiPq4jI48eP5cSJExrLN23aJPr6+kpe6Hfx2H9e6vNtRESE2Nvby6xZs+T+/fvi6uoqdevWlUOHDklycrIEBATI9OnT5aeffuIElx/hxo0boq+vL23bttUIpIeEhEjRokWlePHiGiMh+fn/dE6ePCmWlpYybdo0ZRJy+nzU7fErV66IqampNG7cWIyNjaVJkybKOupAevny5aVhw4Z8KPcRjh07Js2aNVNeR0VFyZIlS8Tc3FxMTEykUqVKEhAQIIMHDxYfHx/x9vZW2jg56X72fTGI/h+kpqbKqlWrxN3dXTp27Ci3bt2SESNGSFhYmDRq1EhJZ7J69Wpxd3eXoUOH6uxFLH26GicnJ2nQoIFUrlxZVq9eLZGRkTJ9+nTR19eXatWqyffffy9VqlTR6d4Fv/76q5QsWZIpXIjoo3Ts2FGjMfLuzaIunh/flX4fevfuLS4uLqJSqWTdunUiktYAa9GihTg6Ooqzs7O0bNky2wWVBg4cKJMnTxYRyfDwNDo6WhwdHWXChAlKWU54394VEREh5cuXl927d0tcXJz4+flJ06ZNpX79+tKnTx8pUaJEhsnRs6t3J0ht1qyZVKxYUc6fPy9RUVHSpEkTadWqlXh7e4u/v78UK1ZMZ/aNtE99jli7dq1MnjxZbt++LW5ubtKyZUtldMqLFy8kIiIiR04Y/aXFxMRIhQoVlHRgrVu3liZNmiippdQmTJggKpVKRo8erY1qfpXSB02ePHki/fr1k/79+2ssd3d3lzp16mSa0ii7tAGyO/U5582bN8q9aUhIiJiZmUmrVq00jqOvr69s27btqwxofSmHDx+WNm3a5Mi2YHb08OFDsbS0VCYRnT17tujr60ujRo2Udfbs2SMBAQHKtZbvzX+zZ88ecXBwkPv378uWLVvEx8dHcufOLdOmTZO//vpLhg8fLra2thIfH6+x3dfaxmEQ/QOln+V38+bN0qhRI2nfvr08efJEnjx5Ik5OTsq6vXr1kiVLliivdemilv6iHBoaKsWLF5epU6dKXFycTJo0SfLly6fkgvz5559FpVLJ8uXLc0SOXwbQiehjzZw5U6ytrbVdjc9GfY1Q91Z+9eqViIiMGzdOVCqVrFmzRkTSrnsRERESGRmZ7YJKb9++lTp16sjIkSMzLFPXtWXLltKjR48vXbXPJn07RP3/mJgY6d27t5I/9eXLl3Ly5EmZOHGibNiwQe7cuaOVun6MLl26SPv27UVEc5+PHTsm69atkyFDhkhAQIDcvHlTW1UkHRAXFyfbtm2TBw8eaJQ/fvxYzM3N5eDBg3Lnzh1p0KCBtGvXTmkXq+lSuz+7iYuLkypVqsiQIUOUsrNnzypzVRw+fFgp3717tzRp0kScnZ0ZQPkCEhISZOjQocpcKJs3b5YqVapIqVKlNO6hkpKSpEWLFmJpaSnnzp0TEQa43lf6c8fVq1elRYsW4uzsLIsWLRKRtEB6iRIlpEmTJnLkyBFp27atNGjQQNmODyk+n/SxIPq89u/fr4xEioyMlPbt28vUqVPFxMRE2rRpk2GEZHa5v9BFd+/elWLFiomlpaVYWlpK69atNVLkXL58Wdq2batxbvmavwMMov8H6U+eGzdulEaNGknHjh0lKChIvv32W+nSpYu0adNGqlatqpNPxWJiYsTd3V2Cg4NFJC1tS6dOnZTlTk5O4ufnJ8HBwXLhwgUREVm3bp3GEGoioq9dtWrVZNy4cdquxienvp6FhIRImzZtxMPDQ9q0aaMEW9W9Ajdv3iyzZs2Sy5cvK9tmp+tDcnKyNG/eXMlZL5K2bykpKco+tm3bVskxmlOkpqZKv379ZM6cOcqETMePHxcjIyM5efKklmv38RISEqRx48ayZ88eEfm/nnxbt24VT09Pef36tTarRzoiJSVFihcvLiqVStzd3aVbt27y+PFjZT6ktWvXKg+e/vzzT7GxsZGxY8dqs8o5RmxsrFStWlX09PRk/fr1GssuXbokbm5u4u3tLXv37hURka5du8qqVauUdXTpnksX3b59W2rWrCkdOnSQY8eOiUjaXAG1atWSLl26SGxsrLJuUlKSTo/I1ob4+HgZNWqU/P777xIWFiYWFhbSt29fGThwoOjr6yuT6d65c0cqVKgg9vb2Ur9+/a86tcKXxnPMpxcXFycjR46UDh06SIsWLeTFixdKDCoxMVHs7e2Va+63334rKpVKOnTooOVa5yx3796V9evXS3BwsERERGgs69KlS47qVPSxVCIioA8mIlCpVBARbNmyBZs2bULhwoVhbm6OJ0+eIDExEWvXrkWuXLmQkpICfX19bVf5vcTGxqJmzZpo0qQJFi1aBACYOnUqrl+/jlWrVqFu3bqoXLkyNm3ahA4dOsDExARLly5Vtk9OToaBgYG2qk9EpHUigtTUVLRv3x4lS5bEzz//rO0qfTLq69njx49RsWJFjBgxArlz58aFCxdw4MABnDhxAnZ2dpgyZQrmzJmDEiVK4Nq1a9n2urB37160bNkSP/30E/r376+xbMGCBQgICMDvv/+OsmXLaqmGn0Zqair09PQAAAkJCejWrRtevnyJS5cuYfLkyXBwcMDevXvx5s0bTJo0CSKiM+2W9Pum1rhxY1hYWGDp0qXIlSsXACAiIgIeHh7Yv38/ihcvro2qko45cuQIGjdujG7duuHu3btISEhA1apV4efnBz09Pfz4449Ys2YNLC0tcevWLZQvXz7DZ5E+TGxsLGrUqAEHBwfY2NggMDAQHTt2xKBBg5R1Ll++jFGjRiEsLAzq29irV68iV65cyv0ZfR5JSUnIlSsXTp06hVGjRiF//vwYP348HBwcsGnTJqxYsQKlSpXCokWLkD9/fo1tdel+WFtiY2NRt25dxMTEoF69eihUqBAsLS0xbNgwAMD27dvRsWNHjBs3DuPGjUNSUhIiIyNRokQJqFQq3oeTToqNjUWdOnVQp04dlClTBq9evUL//v1RpkwZPH/+HEePHsWOHTuwfft2AIC/vz8GDRqEUqVK8Zr7mYSHh8Pc3BwxMTHo168fgoODcenSJRgYGPA6C4A90T9C+qHpCxculIYNG8qtW7c01tGlYSUxMTFSrly5DLPyrlq1SooWLSqVK1fWeALVokULWbFixZeuJhGRTnj48GGO7H11584dWbly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hwfy5MmDKVOmIDk5GZcvX8by5csBAHFxcVCpVNDX10d8fDwmTZqE0NBQjfmBunfvjv379+PXX39971Qu/4TzEhER/XcMohMRERERERERfWL58uXD4cOHcfToURQpUgRdu3ZF+/btAQBTp07F69evUbRoUVSuXBlJSUnw9/fXmB/IxsYGFSpUAAA4OTl9dH04LxER0X/HnOhERERERERERNlQ69atUadOHYwYMULbVSEi+qqxJzoRERERERERUTZy//597NmzB7///ju6deumlA8dOhT58+fP9Gf8+PFarDERUc7GnuhERERERERERNmIr68v9u/fj4CAAPj4+Gi7OkREXz0G0YmIiIiIiIiIiIiIssB0LkREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYYRCciIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORJTNpKamarsKOklEtF0FIiIiItJhiYmJiI6O1nY1iIgoG2IQnYjoC0hJSVGCvCKCxMRExMTEIDQ0FGfPnsUvv/yCESNGoE6dOrC3t0diYuK//s6nT59CpVLh3Llzn7v6/2jZsmV48uTJe6379OlTWFtb49mzZ0rZw4cPlf+bm5tj7dq1AIDIyEhERERk+nv8/f1x6tQpjbJ58+ahfv36/1qHyMhIeHl5ISws7L3qTEREREQ5l7e3N7Zv3w4AOHnyJMzMzBATE6PlWmnX3bt3oVKpcOXKlffextXVFUeOHFFeP3jwQPm/j48PunbtqrwODg7O9HesXLkSS5cu1Sj7888/YWZm9q/3GyKCfv364fDhw+9dZyKiD8EgOhHRF3D06FHo6elBX18fenp6yJMnDwoVKoRy5cqhS5cuWL9+PV6+fImePXti/fr1yJ07t7JtUlISbt68meHn7t27ANKC0O8uu337tsbfnzFjBlQq1Xv/TJgwIdP9MDMzwy+//KK8jomJwffff//eDeygoCA8fvwYpqamAIDdu3ejcuXK+PPPPzOsO2HCBPTq1StDeUhICBYsWAATExON8m3btqFa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jYWFhYXS1qT3x/Y5EREREX0O79tGZxA9E+ohogUKFGAjnYiIiIg+KaYj+XBsnxMRERHR5/RvbXQmYyQiIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYYRCciIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYMtF0BIiIioq+VaqJK21XIUWS8aLsKRERElNOo2F6jbErY9v2S2BOdiIiIiIiIiIiIiCgLDKITEREREREREREREWWBQXQiIiIiIiIiIiIioiwwiE5ERERERERERERElAUG0YmIiIiIiIiIiIiIssAgOhERERERERERERFRFhhEJyIiIiIiIiIiIiLKAoPoRERERESk4fnz57C0tMTx48czLHv16hUqVKiACRMmaJSvW7cOlpaWMDIyQs2aNREUFKQsS0lJwbBhw1C0aFEYGxvDw8MDERERn3kviIiIiIg+DQbRiYiIiIhIERQUBEdHR9y/fz/T5X369MG9e/c0yk6cOIF+/fph5cqViIuLQ7du3dC8eXO8ePECADB16lTs27cPFy5cwLNnz1CgQAF06NDhs+8LEREREdGnwCA6EREREREBANauXQtvb29Mnz490+WrVq3C06dP4ejoqFG+cuVKdOzYEW5ubtDX18eAAQNQtGhRBAYGAgBWrFiBMWPGoEyZMjAyMsLMmTNx+vRp3L1797PvExERERHRx2IQnYiIiIiIAADu7u4IDQ1FmzZtMiy7fv06Jk+ejA0bNkBPT/M24tq1a7CxsdEoq1atGkJCQhAdHY3w8HCN5ebm5jAxMUFISEim9UhMTERsbKzGDxERERGRtjCITkREREREAAAzMzMYGBhkKE9ISICXlxcWL16MEiVKZFgeFxeHfPnyaZTly5cPr169QlxcnPI6s+WZmT59OgoWLKj8WFhY/NddIiIiIiL6aAyiExERERHRPxowYAAaNmyIZs2aZbrc2NgY8fHxGmXx8fEwNjaGsbGx8jqz5ZkZOXIkYmJilJ9Hjx59gr0gIiIiIvpvMnYzISIiIiIiSmfjxo3InTs3Vq9eDQB49eoVzp07h127diE4OBhVq1bFtWvXNLYJDg5G8+bNUahQIZQsWRLXrl1DtWrVAADh4eF4+fIlrK2tM/17hoaGMDQ0/Lw7RURERET0ntgTnYiIiIiI/lFCQgJiYmIQHR2N6OhoODk5YcSIEQgODgYAdO/eHZs3b8a5c+eQlJSEOXPmICoqCp6ensryGTNm4MmTJ4iNjYW/vz9cXFxgZWWlzd0iIiIiInov7IlOREREREQfpUGDBpg7dy68vLzw7NkzWFtb48CBAzAxMQEAjBs3DjExMbC2tkZiYiIaNmyILVu2aLnWRERERETvRyUiou1KZDexsbEoWLAgYmJiUKBAAW1Xh4iIiHIo1USVtquQo8j47N2sZRvzv+OxIyIirVGxvUbZFEO6n8T7tjOZzoWIiIiIiIiIiIiIKAsMohMRERERERERERERZYFBdCIiIiIiIiIiIiKiLDCITkRERERERERERESUBQbRiYiIiIiIiIiIiIiywCA6EREREREREREREVEWtB5Ef/78OSwtLXH8+PEMy169eoUKFSpgwoQJGuXr1q2DpaUljIyMULNmTQQFBSnLUlJSMGzYMBQtWhTGxsbw8PBARETEZ94LIiIiIiIiIiIiIsqJtBpEDwoKgqOjI+7fv5/p8j59+uDevXsaZSdOnEC/fv2wcuVKxMXFoVu3bmjevDlevHgBAJg6dSr27duHCxcu4NmzZyhQoAA6dOjw2feFiIiIiIiIiIiIiHIerQXR165dC29vb0yfPj3T5atWrcLTp0/h6OioUb5y5Up07NgRbm5u0NfXx4ABA1C0aFEEBgYCAFasWIExY8agTJkyMDIywsyZM3H69GncvXs3y7okJiYiNjZW44eIiIiIiIiIiIiISGtBdHd3d4SGhqJNmzYZll2/fh2TJ0/Ghg0boKenWcVr167BxsZGo6xatWoICQlBdHQ0wsPDNZabm5vDxMQEISEhWdZl+vTpKFiwoPJjYWHxkXtHRERERERERERERDmB1oLoZmZmMDAwyFCekJAALy8vLF68GCVKlMiwPC4uDvny5dMoy5cvH169eoW4uDjldWbLszJy5EjExMQoP48ePfovu0REREREREREREREOUzGKLaWDRgwAA0bNkSzZs0yXW5sbIz4+HiNsvj4eJiamsLY2Fh5/e5y9bLMGBoawtDQ8CNrTkREREREREREREQ5jVYnFs3Mxo0bsWrVKhQqVAiFChXC6dOnMWPGDCVFS9WqVXHt2jWNbYKDg2FtbY1ChQqhZMmSGsvDw8Px8uVLWFtbf9H9ICIiIiIiIiIiIiLdl+2C6AkJCYiJiUF0dDSio6Ph5OSEESNGIDg4GADQvXt3bN68GefOnUNSUhLmzJmDqKgoeHp6KstnzJiBJ0+eIDY2Fv7+/nBxcYGVlZU2d4uIiIiIiIiIiIiIdFC2S+fybxo0aIC5c+fCy8sLz549g7W1NQ4cOAATExMAwLhx4xATEwNra2skJiaiYcOG2LJli5ZrTURERERERERERES6SCUiou1KZDexsbEoWLAgYmJiUKBAAW1Xh4iIiHIo1USVtquQo8j47N2sZRvzv+OxIyIirVGxvUbZFEO6n8T7tjOzXToXIiIiIiIiIiIiIqLsgkF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYYRCciIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYYRCciIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhORERERERERERERJQFBtGJiIiIiIiIiIiIiLLAIDoRERERERERERERURYYRCciIiIiIiIiIiIiygKD6EREREREREREREREWWAQnYiIiIiIiIiIiIgoCwyiExERERERERERERFlgUF0IiIiIiIiIiIiIqIsMIhOREREREQanj9/DktLSxw/flwp27hxI6ytrVGgQAGUL18eP//8s8Y269atg6WlJYyMjFCzZk0EBQUpy1JSUjBs2DAULVoUxsbG8PDwQERExJfaHSIiIiKij8IgOhERERERKYKCguDo6Ij79+8rZUePHkXfvn2xdOlSxMTEYMOGDRg3bhx27NgBADhx4gT69euH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++67O6QuAADYndq1nMtZZ52Vxx57LB/+8IczcODAJG99fXT16tU58MADkyTDhw/PrbfemqOOOirnn39+Bg0atPuqBgCAvVwp5ui33nprTjrppHznO9/Jtm3bst9+++WOO+7IPffck+rq6jb7VldX5wc/+EGSpL6+PlOmTGnTP2rUqKxYsWKnn7Nly5Zs2bKl9fXGjRvfU90AAPBetCtEnzdvXvr165fjjjsu5eXlOffcc9Pc3Jyf//znee2115IkN998c5Lk2muvTZ8+fXZbwQAAQOfP0Tdv3pxTTz01Z5xxRq6++uqsXbs23/zmN9OtW7c0NjamoqKizf4VFRXZtGlTkuyyf3szZ87MFVdc8Z7qBQCAjtKuEL25uTllZWW59957U1lZmeXLl6e5uTlz587Npz71qfzsZz9LS0tLTjnllPz617/e3TUDAMBer7Pn6Pfff3/Wrl2bOXPmpEePHqmoqMjkyZNz6qmnpqamJhs2bGizf1NTUyorK5MklZWVaWpq2qF///333+lnXXzxxamtrW19vXHjxgwZMuQ9jwEAAP4SuwzRly9fnpqamjQ2NuaJJ55Iktx+++05/PDD06dPn5SVleWEE05IS0vL7q4VAABIaebovXr12qGte/fuWbt2bYYOHZpf/OIXO9Q4cuTIJMmIESNSX1+/Q//48eOLftbOPg8AAEphlw8W/d3vfpfrrrsu5eXlefjhh7N58+bcf//9Oe6443LOOeckSaZOnZrzzjsvhUIhX/rSl3Z70QAAsDcrxRz92GOPzcCBA3PBBRdk8+bNWb16dS655JIcd9xxmTx5clavXp0bbrghLS0tefDBB7Nw4cLWddAnT56cBQsWZMmSJWlubs7s2bOzbt26TJgw4T3XBQAAu9su70SfPHlykrceUjR//vzceOONmTNnThYtWpTa2toccMABOeyww5Ik3/72t3dvtQAAQEnm6BUVFfnFL36RGTNmZMiQIenZs2dOPPHEXHvttenfv38WLVqU6dOn54ILLsiBBx6Y66+/PmPGjEmSjBs3LnPmzElNTU1ee+21jBw5MosXL05VVVWH1AYAALtTu9ZET5LFixdn27ZtOf7447Nq1ar07t07F110Ud54442MHTu2wwtbtmxZamtr88QTT6R37945/fTTM3v27PTq1StLly7NtGnTsmLFigwcODCXXHJJpk6d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S8rKyvLKK68kSV566aUcfvjh2bhxY0488cR06/ZWFt/S0pI777wzX/nKV3Zr0QAAsDczRwcAgM6zyxB9xowZWbp0aTZv3pxDDz00gwYNyrBhw/Lcc89lyJAheeyxx3LQQQclSd58883ss88+u71oAADYm5mjAwBA59nlci4f+chHct555+UnP/lJXnnllXzxi1/M66+/njlz5mSfffZp85Aik3MAANj9zNEBAKDztGtN9Lf17ds3//RP/5Snnnoq48ePz7PPPpshQ4bsrtoAAIBdMEcHAIDda5fLuezM4MGDO7oOAADgPTBHBwCA3eNd3YkOAAAAAAB7EyE6AAAAAAAUIUQHAAAAAIAihOgAAAAAAFCEEB0AAAAAAIoQogMAAAAAQBFCdAAAAAAAKEKIDgAAAAAARQjRAQAAAACgCCE6AAAAAAAUIUQHAAAAAIAihOgAAAAAAFCEEB0AAAAAAIoQogMAAAAAQBFCdAAAoF02b96cL33pS9l///1TVVWVU045JS+//HKSZOnSpTn66KNTXl6eYcOGZe7cuW2OveWWWzJ8+PCUl5fnyCOPzGOPPVaKIQAAwLsmRAcAANrl3HPPzVNPPZUnnngiL7/8cnr37p3Jkydn/fr1Oemkk1JTU5OGhobMnz8/tbW1eeCBB5IkDz/8cKZNm5a6uro0Njbm7LPPzvjx47N27doSjwgAAHZNiA4AAOzSa6+9loULF2bu3LkZPHhwysvLc+ONN+bb3/527rrrrlRVVaW2tjY9e/bM6NGjU1NTk3nz5iVJ6urqMmnSpIwdOzbdu3fP9OnTM2DAgNx9990lHhUAAOyaEB0AANil3//+9ykvL8+SJUvyoQ99KAceeGC+8pWvZPDgwamvr091dXWb/aurq7NixYok2Wn/qFGjWvu3t2XLlmzcuLHNBgAApSJEBwAAdmndunV58803s2jRovzmN7/JU089ldWrV+fMM89MY2NjKioq2uxfUVGRTZs2Jcku+7c3c+bM9O3bt3UbMmTI7hkUAAC0gxAdAADYpX322Sdbt27Ntddem/79+6d///658sors3jx4iRJU1NTm/2bmppSWVmZJKmsrHzH/u1dfPHFaWhoaN1Wrly5G0YEAADtI0QHAAB26dBDD02SbN68ubVt69at6datW4444ojU19e32X/58uUZOXJkkmTEiBHv2L+9Xr16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p512Wv7lX/6l1GXAOxKiAwAAsFfp169fysrK3nEbNmzYDsf96Ec/yllnnZUk+dnPfpZTTjmlXZ9XUVGRnj177nQ7+eSTO3JoAJ3qxBNP3OX1tKysLA899FCpS4X3RIgOAF3Atm3b0tjYWOoyYAerVq0qdQkAHW7t2rVpbm5u3b7whS/ky1/+cpu2559/vs0x//Ef/5Fnnnkmp5xySlatWpWHHnooZ5111k7DoldffXWHz3zhhRdSKBTabPPmzeusIQPsNgsWLGi9rr388sv50Y9+1OZa95GPfKR130svvXSHa+Y999yT6dOn79B+//33l3BU0JYQHXhf27x5c7785S/niCOOyNSpU/Paa6+16R81alSJKmNv94Mf/CBf+cpX8oc//CG//OUvc8ABB6Rfv375n//zfwrT6VKqq6tLXQJAh+vevXt69OjRur0d2Pz3tu7du7c55vLLL0/fvn3Ts2fPXHPNNa2hUGNj4w7h+IEHHliKYQGUzNvLVj377LOZNWtW65JVhUKhzX7f/OY32/yDZXNzc0499dRcd911O7SPGzeuRKOBHfUodQEAu9NXv/rVPP7445kyZUruvffeHHXUUfmP//iPDB06NEny4osvlrZA9krXXHNN5s+fn82bN+fOO+/Maaedln//93/P5s2bc+GFF+ayyy7Ld7/73VKXyV5m7NixO21vbGxs7Wvv2r8A7zcLFizII488kg984AN57rnnUldXl3vuuScnnHBCa3D0tm7duqVbtx3vV9t+vyTWQwfeF8rKynL44Yfnqaeeam3r2bNnkuSmm25qs+/OrpFlZWXp1q1bevQQU9J1OTvpMI888sgu9/nEJz7RCZXA/+8nP/lJHn/88QwaNCjTp0/PlClTcvLJJ+fxxx9PRUVFysrKSl0ie6Ebb7wxS5Ysybp16zJy5MhceumlOeCAA5IkP/7xj3PccccJ0el0BxxwQO6444586UtfyoABA1rblyxZkuOPP76ElQGU1vPPP5/zzz8/V1xxRebOnZspU6bkH/7hH/LpT386yVvrq/93F1xwQWbPnr3D+xxyyCE7ff8TTjihw2sG6EwtLS25+eabkyRPPvlkZs6cmYULFyZJBgwYkBtvvLHN/ocddlieeeaZNm1vL+nytrPOOqv1PaErKCts/70K+AsdfPDBefHFF3f4qs7bysrKsm3btk6uir3dfvvtlzVr1rT+S/fWrVvzd3/3d9l///3z4x//OJWVlZbOoNP17ds3DQ0NSZKDDjoozz//fOudGs3NzRk4cGDWr19fyhLZS910002ZNWtW5s6d2/r12f322y/r1q0rcWUAu9cXv/jF9OvXb6f/iP2HP/whL7zwQgYNGpTTTjstv/rVrzJ06NB069YtZWVlaWxszL777vuO77/PPvvkP//zP3d4WOnNN9+chQsX5t///d87cDQAnefEE0/MmWeemWeffXan/UceeWS++c1vZvbs2RkzZkySt76ZUygUsn79+hx55JGpqqpKeXl5evfunV/+8pdJin+rB0rF2UiH+e1vf5tDDjkkd955Z1paWnbYBOiUwuGHH55//dd/bX3do0eP3H777fntb3+br33ta+5EpyT+9m//Nj/84Q+TJC+99FJrgL5t27Z8/etfz1FHHVXK8tiLnXvuubnnnnsyY8aMXHLJJf7uBshbf2+ffPLJra//5m/+pk2wU1lZ2eZBeIcffngpygQoiaampgwcODBvvvlmrrjiih22/379fNvbz6W48MILc/rpp2fo0KGZNGlSVq5cmXvvvTc9evQQoNPlOCPpMPvvv39+8IMfpLa21tp+dBnXXnttLr300kycOLG1bcCAAbnvvvsyb968NDU1lbA69lYzZ87Meeedlw0bNrRp//CHP5z58+dbyoWSGjlyZH7729/mtddey+jRowXpALuwZs2avPHGG63b0qVLS10SQKdZs2ZNKisrk7z1TLK3Hwq6adOmdzzu2muvze9+97tcddVVSd4K1m+66aZMmTKlzdrq0FVYE50ONXr06Fx++eVZs2ZNBg4cWOpyIEcddVT+7//9v3nhhRfatFdXV+eJJ57I97///RJVxt7sk5/8ZF566aUd1lCdN29eDj/88FRUVJSmMPgvvXv3zv/5P/8n8+fPz49+9KNSlwPQoU4//fTceeedO+277rrr2rxuz5q8vXr1yj777LPLz/2bv/mbnbZbEx3YU7355pt57rnnctBBB7X7mJaWllx22WW5+eab86tf/arNs8o++clP5pJLLsknPvGJLFiwoPXZE9AVCNHpcGeddVapS4A2+vfvn/79++/QPmjQoFx55ZUlqAje+vbO9o455pgSVALF/f3f/33+/u//vtRlAHSo22+/vd3fnO3I5QSee+65DB06tE3bD3/4w9x+++0d9hkAnemnP/1phg4dmkGDBiV56+7ya6+9tuj+q1atyoQJE9LY2JhHHnkkBx988A77XHjhhamqqspnPvOZfPrTn86Pf/zj9OghvqT0LOcCAADAXqNbt27p0aNHu7aOCtEPP/zw9O7de4f3HzRoUKqrqzvkMwA6U0tLS7797W/n7LPPTpLMmjUrhUKhzdbU1JStW7fmjTfeSPfu3XPAAQdkwoQJWbZsWZsAfftnlU2ZMiX/+Z//mZqaGgE6XUZZoVAolLoIAAAAAGDPcP/99+ecc85JfX1965ro25s9e3b+8R//MUcccUQeffTRostWnnbaafnUpz6V888/f3eWDO+JEB2AHWzdurX1X/ybm5vT1NSU1atXZ9WqVXnqqafy0EMP5eMf/3j+8R//seh7/O53v8tpp52WVatWdVbZAAAAdJINGzbs8JwneL/ynQgAdjBx4sTce++9SZJCoZAePXqkX79++ehHP5oPfvCDmThxYsaNG9e6f6FQyLZt29q8x9uvt27d2qa9W7duHbq+KAAAAJ1PgM7exJ3oAOygubk5W7ZsSVlZWXr37p2rr746a9asyXe/+92d7v/QQw/lk5/8ZLvee+LEibnjjjs6sFoAAACA3cetgAC0MWvWrPzVX/1VKisrs++++6Z79+657LLLct1116WsrKzNdtFFF7Ue95GPfCSFQiGNjY3p3r17mwfK9O3bNytXrkyhUBCgAwAAAHsUIToAbXzta19rXQf9sssuS+/evTNu3Lgce+yx6devX771rW/lzTffTHNzc66++uo2xx544IEZPHhwtm3bln79+rVuDQ0NGTFiRPr165cf/ehHJRoZAAAAwLtnTXQA2li3bl0WLFiQ73znO1m7dm3uuOOOLFu2LGvWrMmsWbNyxhln5N/+7d/y1a9+NRMnTmzzJPZnnnkmmzZtyuDBg/Piiy+2tg8dOjS/+c1vMmjQoJSXl5dgVAAAAAB/GSE6AK1efPHFHHLIIdm2bVtOPPHEzJkzJ8OHD8+hhx6arVu3ZujQoVmyZEmuuOKKnHvuuZkyZUqefvrp1uP79u2b7t27J3nrrvS3bdmyJX369PHgGQAAAGCPYzkXAFoNGzYsV1xxRX7/+9+nT58+qa6uzr777ptDDz00I0aMSHl5eYYOHZpTTjklf/zjH1NXV5dDDz0027ZtS7dub/2Vsu+++6ZQKOTNN99s3QqFQgYPHlzi0QEAAAC8e2WFQqFQ6iIA6NqeeeaZXHbZZWlpacnkyZNz8sknt+m/7777cs011+Swww7LvHnzUigU0rNnz9b+lpaWNDc3Z9OmTamoqOjs8gEAAAD+YpZzAaCNYcOG5Y9//GPR/jvvvLP194qKimzatCmvvvpq+vfvn5tuuinTp0/P2LFjc/vtt2fs2LFZtWpVTj311IwbN06ADgAAAOxxLOcCQBvPP/98mpub22x33nlnxo4du0N7Q0NDkmT58uX54Ac/mCSprq7OrbfemjPOOCPnnXdejjjiiNTU1OTaa68t5bAAAAAA/iJCdADa6N69e3r06JEePXrkz3/+c9avX5+GhoZ069attf3trXv37vnzn/+cu+++OyeeeGKampry0EMP5Z577klZWVl+85vfpKWlJc8880zuvfferFq1qtTDAwAAAHhXhOgAFPXss89m4MCBmT59ek444YSd7vPzn/88BxxwQJYsWZIBAwbkkksuyYABA/L73/8+Tz75ZOrr63PwwQfnuuuuy6hRo3LMMcd08igAAAAA/nIeLArAe7Zp06b81V/9VZK0/tyZQqGQpqam7Lvvvp1VGgAAAMB7IkQHAAAAAIAiLOcCAAAAAABFCNEBAAAAAKAIIToAAAAAABQhRAcAAAAAgCKE6AAAAAAAUIQQHQAAAAAAihCiAwAAAABAEUJ0AAAAAAAoQogOAAAAAABF/H/g2FnwM+Y/XgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1500x1000 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化时间模式\n",
    "fig, axes = plt.subplots(2, 2, figsize=(15, 10))\n",
    "\n",
    "# 月度销售趋势\n",
    "monthly_sales.plot(kind='bar', ax=axes[0,0], title='月度平均销售额')\n",
    "axes[0,0].set_ylabel('销售额')\n",
    "axes[0,0].tick_params(axis='x', rotation=45)\n",
    "\n",
    "# 星期销售模式\n",
    "weekday_sales.plot(kind='bar', ax=axes[0,1], title='星期销售模式', color='orange')\n",
    "axes[0,1].set_ylabel('销售额')\n",
    "axes[0,1].tick_params(axis='x', rotation=45)\n",
    "\n",
    "# 季度销售对比\n",
    "quarterly_stats['mean'].plot(kind='bar', ax=axes[1,0], title='季度平均销售额', color='green')\n",
    "axes[1,0].set_ylabel('销售额')\n",
    "axes[1,0].set_xlabel('季度')\n",
    "\n",
    "# 工作日vs周末\n",
    "weekend_comparison['mean'].plot(kind='bar', ax=axes[1,1], title='工作日vs周末销售额', color='red')\n",
    "axes[1,1].set_ylabel('销售额')\n",
    "axes[1,1].tick_params(axis='x', rotation=0)\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "机器学习时间特征:\n",
      "        date        sales  year  month  day  weekday  quarter  month_sin  \\\n",
      "0 2023-01-01  1349.671415  2023      1    1        6        1        0.5   \n",
      "1 2023-01-02   989.616241  2023      1    2        0        1        0.5   \n",
      "2 2023-01-03  1071.653176  2023      1    3        1        1        0.5   \n",
      "3 2023-01-04  1162.626919  2023      1    4        2        1        0.5   \n",
      "4 2023-01-05   990.345148  2023      1    5        3        1        0.5   \n",
      "\n",
      "   month_cos  weekday_sin  weekday_cos  is_weekend  is_month_start  \\\n",
      "0   0.866025    -0.781831     0.623490        True            True   \n",
      "1   0.866025     0.000000     1.000000       False           False   \n",
      "2   0.866025     0.781831     0.623490       False           False   \n",
      "3   0.866025     0.974928    -0.222521       False           False   \n",
      "4   0.866025     0.433884    -0.900969       False           False   \n",
      "\n",
      "   is_month_end  is_quarter_start  is_quarter_end  days_from_start  dayofyear  \n",
      "0         False              True           False                0          1  \n",
      "1         False             False           False                1          2  \n",
      "2         False             False           False                2          3  \n",
      "3         False             False           False                3          4  \n",
      "4         False             False           False                4          5  \n",
      "\n",
      "特征数量: 18\n",
      "特征列表: ['date', 'sales', 'year', 'month', 'day', 'weekday', 'quarter', 'month_sin', 'month_cos', 'weekday_sin', 'weekday_cos', 'is_weekend', 'is_month_start', 'is_month_end', 'is_quarter_start', 'is_quarter_end', 'days_from_start', 'dayofyear']\n"
     ]
    }
   ],
   "source": [
    "# 创建时间特征用于机器学习\n",
    "def create_time_features(df, date_col):\n",
    "    \"\"\"\n",
    "    从日期列创建时间特征\n",
    "    \"\"\"\n",
    "    df = df.copy()\n",
    "    \n",
    "    # 基本时间特征\n",
    "    df['year'] = df[date_col].dt.year\n",
    "    df['month'] = df[date_col].dt.month\n",
    "    df['day'] = df[date_col].dt.day\n",
    "    df['weekday'] = df[date_col].dt.weekday\n",
    "    df['quarter'] = df[date_col].dt.quarter\n",
    "    \n",
    "    # 周期性特征（正弦余弦编码）\n",
    "    df['month_sin'] = np.sin(2 * np.pi * df['month'] / 12)\n",
    "    df['month_cos'] = np.cos(2 * np.pi * df['month'] / 12)\n",
    "    df['weekday_sin'] = np.sin(2 * np.pi * df['weekday'] / 7)\n",
    "    df['weekday_cos'] = np.cos(2 * np.pi * df['weekday'] / 7)\n",
    "    \n",
    "    # 布尔特征\n",
    "    df['is_weekend'] = df['weekday'] >= 5\n",
    "    df['is_month_start'] = df[date_col].dt.is_month_start\n",
    "    df['is_month_end'] = df[date_col].dt.is_month_end\n",
    "    df['is_quarter_start'] = df[date_col].dt.is_quarter_start\n",
    "    df['is_quarter_end'] = df[date_col].dt.is_quarter_end\n",
    "    \n",
    "    # 时间距离特征\n",
    "    df['days_from_start'] = (df[date_col] - df[date_col].min()).dt.days\n",
    "    df['dayofyear'] = df[date_col].dt.dayofyear\n",
    "    \n",
    "    return df\n",
    "\n",
    "# 应用特征工程\n",
    "ml_features = create_time_features(sales_df[['date', 'sales']], 'date')\n",
    "\n",
    "print(\"机器学习时间特征:\")\n",
    "print(ml_features.head())\n",
    "print(f\"\\n特征数量: {ml_features.shape[1]}\")\n",
    "print(f\"特征列表: {list(ml_features.columns)}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml311",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
